spark实验三-spark进阶编程

1.Spark编程统计各地区租房人数

实验目标:

(1)   掌握在IntelliJ IDEA 中操作spark程序开发

(2)   打包程序提交集群运行

实验说明:

现有一份某省份各地区租房信息文件 house.txt,文件中共有8个数据字段,字段说明如下表所示:

字段名称

说明

租房ID

租房编号

标题

发布的租房标题

链接

网址,可查看租房信息

地区

房子所在地区

地点

房子所在城市地点

地铁站

附近的地铁站

出租房数

可出租的房子数量

日期

发布日期

请在IntelliJ IDEA 中进行spark编程统计各地区的租房人数,完成编译后打包spark工程,通过spark-submit提交程序至集群中运行。

实现思路及步骤:

(1)     读取数据并创建RDD

val lines = sc.textFile("file:///root/doc/house.txt")


(2)     清洗数据,例如某些地铁站数据为空


val clean_lines = lines.filter(line => {  
  val fields = line.split("\\s+") // 使用正则表达式分割字段  
  fields.length > 5 && fields(5).trim.nonEmpty // 确保至少有6个字段且第6个字段不为空  
})


(3)     使用reduceByKey()方法统计人数


// 将清洗后的数据的第一列作为键,1作为值,转换为键值对  
val categoryPairs = clean_lines.map(line => {  
  val fields = line.split("\\s+")  
  (fields(0).trim, 1) // 假设第一列是分类信息  
})  
  
// 使用reduceByKey聚合相同分类的计数  
val categoryCounts = categoryPairs.reduceByKey(_ + _)  
  
categoryCounts.count()

(4)     使用saveAsTextFile()保存数据到hdfs


val hdfsOutputPath = "hdfs://master:9000/user/hadoop/clean_lines"
val lines = sc.textFile("file:///root/doc/house.txt")
 lines.saveAsTextFile(hdfsOutputPath)
 hdfs dfs -cat /user/hadoop/clean_lines/part-00000

2.自定义分区器事先按照人物标签进行数据分区

实验目标:

  1. 掌握使用spark自定义分区
  2. 掌握打包spark工程
  3. 掌握通过spark-submit提交应用

实验说明

先有一份某年度中国女排集训运动员数据文件 Volleyball_Plaryer.csv ,数据字段说明如下表所示

现要求在IntelliJ IDEA 中进行spark编程,通过自定义分区实现将运动员按照所属位置进行分区,并将程序打包,通过spark-submit提交应用。按照“主攻,接应,二传,副攻,自由人”五个标签设置五个分区,将分区结果输出到hdfs上。其中一个分区的结果举例如图所示:

实现思路及步骤:

  1. 使用textFile()方法读取数据创建RDD,并设置分区数为5
  2. 使用map()方法将数据输入数据按都好进行分割,筛选出position和name字段,并转化为(Positon,Name)的形式
  3. 自定义MyPartioner类,继承该类,重写类里面的numPartions和getPartition 方法。
  4. 在主函数中调用自定义分区类MyPartioner
  5. 打包spark工程,将应用程序提交至集群运行

 如何在idea使用scala操作可以参考

IDEA使用SCALA-CSDN博客

import org.apache.spark.api.java.JavaRDD.fromRDD
import org.apache.spark.repl.Main.conf
import org.apache.spark.{Partitioner, SparkConf, SparkContext}object Main {def main(args: Array[String]): Unit = {val sparkConf = new SparkConf()sparkConf.setMaster("local")   //本地单线程运行sparkConf.setAppName("Main")val sc = new SparkContext(sparkConf)val lines = sc.textFile("/root/doc/Volleyball_Players.csv",5)val  new_lines= lines.map(line => {val fields = line.split(",")val position = fields(5).trimval name = fields(0).trim(position, name)})val myPartitioner: MyPartitioner = new MyPartitioner(5)new_lines.repartition(myPartitioner.numPartitions)new_lines.foreach(println)}
}
class MyPartitioner(override val numPartitions: Int) extends Partitioner {override def getPartition(key: Any): Int = key match {case (position: String) => position.hashCode % numPartitions}
}

打包代码

打包成功后在你本机找到该文件

传到linux下

将Volleyball_Players.csv上传到hdfs目录下

 hdfs dfs -mkdir -p /root/doc
hdfs dfs -put Volleyball_Players.csv /root/doc/

此时将代码提交
spark-submit --master yarn --class Main untitled4.jar

--master yarn 指定了 Spark 应用程序应该运行在 YARN(Yet Another Resource Negotiator)集群管理器上。

--class Main指示 Spark 应用程序的入口点是 Main类中的 main 方法。您需要将 Main 替换为您实际的主类名。

untitled4.jar 是包含您 Spark 应用程序的 JAR 文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619787.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更改ip地址的几种方式有哪些

在数字化时代,IP地址作为网络设备的标识,对于我们在网络世界中的活动至关重要。然而,出于多种原因,如保护隐私、访问特定网站或进行网络测试,我们可能需要更改IP地址。虎观代理将详细介绍IP地址的更改方法与步骤&#…

基于Java停车场管理系统设计与实现(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…

欢乐钓鱼大师秒杀源码

gg修改器设置里面单选a内存然后去试试e类型搜索鱼竿的拉杆速度然后点修改点很多增加1然后游戏返回在进去看鱼竿拉速然后在修改器的里面找到拉速一样的数值其他恢复全移除不恢复移除会闪退然后点开保留下来的拉速数值点转到会有一堆数值你得找里面找到鱼竿的伤害距离等数值就可以…

[2024最新]MySQL-mysql 8.0.11安装教程

网上的教程有很多,基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很多个教程才安装好的,所以本教程可能也不是普遍适合的。 安装环境:win 10 1、下载zip安装包: MySQL8.0 For Windows zip包下载地…

vscode只修改几行,git却显示整个文件都被修改

原因:不同的操作系统默认的回车换行符是不一样的,有些编辑器会自动修改回车换行,然后就整个文件都变化了。 Unix/Linux/Mac使用的是LF,但Windows一直使用CRLF【回车(CR, ASCII 13, r) 换行(LF, ASCII 10, n)】作为换行符。 解决&a…

考研数学|跟「张宇」还是「武忠祥」?看这一篇就明白了

我想告诉你,选择张宇老师的课程也是一个很好的选择。而且24考研压中了很多类似的题目! 推荐张宇老师的原因不仅是课程讲的比较好,更因为30讲这本书是比较系统的一本参考书。 张宇老师的数学课程一直以来都备受考生的推崇,他的讲…

mac基础操作、快捷、软件快捷方式

欢迎来到我的博客,代码的世界里,每一行都是一个故事 mac基础操作、快捷、软件快捷方式 前言mac快捷操作快捷查找切换页面页面缩略访达和命令端切换创建文件夹创建文件删除文件/文件夹获取文件的路径移动文件或文件夹复制文件命令端常用命令 前言 主要是方…

前端Vue3+uni+Ts

本次记录小兔仙仙的制作过程。 先看下我们的项目截图。主要是手机端,这里用了uniappVScode.三端适配的。可以打包成安卓和苹果。微信小程序。 首先:创建一个uni新的ts项目。 # 通过 git 从 gitee 克隆下载 登录 - Gitee.com git clone -b vite-ts http…

【面试八股总结】排序算法(一)

参考资料 :阿秀 一、冒泡排序 冒泡排序就是把小的元素往前交换或者把大的元素往后交换,比较相邻的两个元素,交换也发生在这两个元素之间。具体步骤: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对…

每日OJ题_BFS解决最短路①_力扣1926. 迷宫中离入口最近的出口

目录 力扣1926. 迷宫中离入口最近的出口 解析代码 力扣1926. 迷宫中离入口最近的出口 1926. 迷宫中离入口最近的出口 难度 中等 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 . 表示)和墙&…

非线性SVM模型

5个条件判断一件事情是否发生,每个条件可能性只有2种(发生或者不发生),计算每个条件对这件事情发生的影响力。非线性SVM模型的程序。 例一 为了计算每个条件对一件事情发生的影响力,并使用非线性支持向量机&#xff0…

深度学习500问——Chapter08:目标检测(1)

文章目录 8.1 基本概念 8.1.1 什么是目标检测 8.1.2 目标检测要解决的核心问题 8.1.3 目标检测算法分类 8.1.4 目标检测有哪些应用 8.2 Two Stage 目标检测算法 8.2.1 R-CNN 8.2.2 Fast R-CNN 8.2.3 Faster R-CNN 8.1 基本概念 8.1.1 什么是目标检测 目标检测(Obj…