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.mzph.cn/news/817151.shtml

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

相关文章

每日两题1

文章目录 使用最小花费爬楼梯91解码方法 使用最小花费爬楼梯 class Solution { public:int minCostClimbingStairs(vector<int>& cost) {if(cost.size() 2)return min(cost[0],cost[1]);vector<int> dp;dp.reserve(cost.size()1);dp[0] 0;dp[1] 0;for(int i…

【域适应】基于深度域适应MMD损失的典型四分类任务实现

关于 MMD &#xff08;maximum mean discrepancy&#xff09;是用来衡量两组数据分布之间相似度的度量。一般地&#xff0c;如果两组数据分布相似&#xff0c;那么MMD 损失就相对较小&#xff0c;说明两组数据/特征处于相似的特征空间中。基于这个想法&#xff0c;对于源域和目…

顶切,半顶切是什么意思?

齿轮加工及刀具中有一些特定名词或者叫法&#xff0c;不熟悉的小伙伴可能最开始会有一些困惑&#xff0c;这不&#xff0c;最近有小伙伴问了一个问题&#xff1a;顶切是说齿顶的倒角吗&#xff1f; 今天就给大家说说顶切和半顶切。 一、顶切 Topping 从字面上可以看到可以想到…

MySQL的权限管理

MySQL的权限管理 在理解MySQL的权限管理之前&#xff0c;我们需要先了解其架构设计以及权限管理在该架构中的定位。 MySQL的架构设计 MySQL数据库系统采用了分层的架构设计&#xff0c;主要可以分为以下几个层级&#xff1a; 连接层&#xff1a;最外层&#xff0c;处理连接…

爬虫 selenium

爬虫 selenium 【一】介绍 【1】说明 Selenium是一款广泛应用于Web应用程序测试的自动化测试框架 它可以模拟用户再浏览器上的行为对Web应用进行自动化测试 主要作用&#xff1a; 浏览器控制&#xff1a;启动、切换、关闭不同浏览器元素定位于操作&#xff1a;通过CSS选择器…

vscode中运行js

vscode中运行js 目前vscode插件运行js都是基于node环境&#xff0c;vscode控制台打印有些数据不方便等缺点。 每次调试在浏览器中运行js&#xff0c;需要创建html模板、插入js。期望能够直接运行js可以打开浏览器运行js&#xff0c;在vscode插件市场找到一款插件可以做到。 插…

yolo系列(之一)

深度学习经典检测算法 two-stage (两阶段) : Faster-rcnn Mask-Rcnn系列 &#xff08;输入图像---》CNN特征---》预选框---》输出结果&#xff09; one-stage (单阶段): YOLO系列 &#xff08;输入图像---》CNN特征---》输出结果&#xff09; one-stage的特点&#xff1a;&…

深度学习学习日记4.15 (面向GPT学习)

精确学习时间&#xff08;09点35分开始&#xff09; 深度学习 torch.nntorch.utils.datanumpytorchvision中的模块有哪些os 模块PIL&#xff08;Python Imaging Library&#xff09;tqdmmatplotlibnn.ReLU inplace参数设为Truenn.relu 训练的迭代过程梯度清零loss指标计算为什…

SQLite超详细的编译时选项(十六)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite数据库文件格式&#xff08;十五&#xff09; 下一篇&#xff1a;SQLite 在Android安装与定制方案&#xff08;十七&#xff09; 1. 概述 对于大多数目的&#xff0c;SQLite可以使用默认的 编译选项。但是…

WinForms 零基础进阶教程:文件操作与 CSV 处理

文章目录 文件操作数据存储与文件操作文件存取的好处文件存取的方式文本文件的写入和读取文本文件的删除、复制和移动 目录的操作文件属性操作文件路径 对话框OpenFileDialog对话框SaveFileDialog对话框对话框中CheckPathExists属性的应用 CSV 文件读写与 DataGridView 进阶Dat…

Python基于Django的微博热搜、微博舆论可视化系统

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Redis限流插件

Redis限流插件: 1:搭建层级结构 同时对 redis.log 授权 chmod 777 redis.log2:确认 redis 版本 3:下载redis配置文件 redis.conf https://redis.io/docs/management/config/ 4:上传/redis/conf作为原始 redis.conf 5:在/redis_6390/conf下编辑redis.conf docker run -it \ --…

51单片机上面的IIC协议

1、什么是IIC协议 2、模拟IIC协议 51单片机上面是没有与IIC协议相关的寄存器的&#xff08;没有相关的硬件&#xff09;&#xff0c;不像串口可以配置对应的寄存器达到目的&#xff08;比如修改波特率9600 or 115200&#xff09;&#xff0c;要配置IIC只能够根据用户手册里面的…

​面试经典150题——LRU 缓存

​ 1. 题目描述 2. 题目分析与解析 首先讲解一下LRU LRU 是“Least Recently Used”的缩写&#xff0c;LRU 算法的基本思想是跟踪最近最少使用的数据&#xff0c;并在缓存已满且需要存储新数据时优先驱逐该数据。 LRU 算法通常的工作原理的简化解释&#xff1a; 当访问或使…

vue.config.js跨域问题解决

讲解视频 问题背景 目标地址&#xff1a; 而当前项目启动是http&#xff0c;协议名不同&#xff0c;所以跨域了 解决步骤和解答 1. 新建vue.config.js文件 2. 添加如下代码&#xff1a; 一般目标路径target写 域名 就可以了 但其实&#xff0c;写路径也可以&#xff0c;…

查看 Linux 接入的 USB 设备速率是 USB2 还是 USB3

查看接入 usb 设备的速率 使用以下命令查看接入的 USB 设备速率&#xff08;每一行最后的 xxM 字样&#xff09;。插入设备前查看一次&#xff0c;插入设备后查看一次&#xff0c;对比即可定位到刚插入的设备是哪一条。 lsusb -t命令输出如下图 对照 USB 速率表 对照 USB 速…

EasyRecovery数据恢复软件2024试用版下载安装包

EasyRecovery支持的文件格式非常广泛&#xff0c;几乎涵盖了用户日常所需的所有文件类型。具体来说&#xff0c;它支持恢复的办公文档类型包括Microsoft Word、Excel、PPT、MS office、Adobe PDF、Access等。此外&#xff0c;对于音频文件&#xff0c;EasyRecovery同样支持丰富…

初识three.js创建第一个threejs3D页面

说到3D&#xff0c;想必大家都能想到three.js&#xff0c;它是由WebGL封装出来的&#xff0c;接下来&#xff0c;我手把手教大家创建一个简单的3D页面 话尽在代码中&#xff0c;哈哈 大家可以复制代码玩一下 <!DOCTYPE html> <html lang"en"><head&…

【嵌入式 - 输出驱动电路Open Drain (开漏)和Push-Pull (推挽)】

定义 Open drain 和 push-pull 是两种常见的输出驱动电路。它们在数字电子电路中用于控制信号的输出。让我逐一解释它们&#xff1a; 1. Open Drain (开漏): Open drain 输出端通常连接到地 (GND) 或者一个高电阻 (pull-up) 上。当输出信号为逻辑高电平时&#xff0c;输出端…

【位运算】Leetcode 丢失的数字

题目解析 268. 丢失的数字 本题的意思就是数组的长度为n&#xff0c;在[0,n]区间中寻找缺失的一个数字 算法讲解 直观思路&#xff1a;排序 Hash&#xff0c;顺序查找缺失的数字 优化&#xff1a;使用异或&#xff0c;首先将[0,n]之间所有数字异或在一起&#xff0c;然后将…