林子雨spark scala版编程小结
dataframe有first()返回第一行数据,使用head(n)返回前n行数据,也可以使用take(n)返回前n行记录
在RDD的行动操作中,用take(n)返回前n个元素,用top(n)逆序返回前n个元素
在dataframe中使用count()输出dataframe对象的行数。
在dataframe中使用distinct()方法返回一个不包含重复记录的Dataframe
在RDD的转换操作中,也是使用distinct()方法进行去重操作
DataFrame的操作
val sqlContext = new org.apache.spark.sql.SQLContext(sc)//初始化SQLContext对象为sqlContext,sqlContext对象是Spark SQL的入口点。
var df = sqlContext.read.format("json").load("D:\\Long\\Spark\\employee.json")//使用json格式创建DataFrame
//1.查询所有的数据
df.show
+----+---+-----+
| age| id| name|
+----+---+-----+
| 36| 1| Ella|
| 29| 2| Bob|
| 29| 3| Jack|
| 28| 4| Jim|
| 28| 4| Jim|
|null| 5|Damon|
|null| 5|Damon|
+----+---+-----+
//2.查询所有的数据,并去除重复的数据
df.distinct().show
+----+---+-----+
| age| id| name|
+----+---+-----+
| 36| 1| Ella|
| 29| 3| Jack|
|null| 5|Damon|
| 29| 2| Bob|
| 28| 4| Jim|
+----+---+-----+
//2.查询所有的数据,打印时去除id字段
df.select("age","name").show
+----+-----+
| age| name|
+----+-----+
| 36| Ella|
| 29| Bob|
| 29| Jack|
| 28| Jim|
| 28| Jim|
|null|Damon|
|null|Damon|
+----+-----+
//或者使用 df.drop("id").show 使用drop一次只能删除一个字段
//3.筛选出age>30的记录
df.where("age>30").show //注意where里的写法 "age > 30"
+---+---+-----+
|age| id| name|
+---+---+-----+
| 36| 1| Ella|
+---+---+-----+
//4.将数据按age分组
df.groupBy("age").count.show
+----+-----+
| age|count|
+----+-----+
| 29| 2|
|null| 2|
| 28| 2|
| 36| 1|
+----+-----+
//5.将数据按name升序排列df.sort("name").show
+----+---+-----+
| age| id| name|
+----+---+-----+
| 36| 1| Ella|
| 29| 2| Bob|
|null| 5|Damon|
|null| 5|Damon|
| 29| 3| Jack|
| 28| 4| Jim|
| 28| 4| Jim|
+----+---+-----+
//6.取出前3行数据
df.take(3)//take返回的是前若干行数据的数组
Array[org.apache.spark.sql.Row] = Array([36,1, Ella], [29,2,Bob], [29,3,Jack])
df.limit(3).show//而使用limit是返回前若干行数组组成的Dateframe对象,可以用show方法进行查看
+---+---+-----+
|age| id| name|
+---+---+-----+
| 36| 1| Ella|
| 29| 2| Bob|
| 29| 3| Jack|
+---+---+-----+
//7.查询所有记录的name列,并为其取别名为username
df.select(df("name").as("username")).show //这里必须df(...).as
+--------+
|username|
+--------+
| Ella|
| Bob|
| Jack|
| Jim|
| Jim|
| Damon|
| Damon|
+--------+
//8.查询年龄age的平均值df.agg(avg("age")).show //使用mean也是等价的df.agg(mean("age")).show
+--------+
|avg(age)|
+--------+
| 30.0|
+--------+
//9.查询年龄age的最小值df.agg(min("age")).show
+--------+
|min(age)|
+--------+
| 28|
+--------+
RDD操作
数据集
Aaron,OperatingSystem,100
Aaron,Python,50
Aaron,ComputerNetwork,30
....
共1000+数据
该系总共有多少学生
var rdd = sc.textFile("D:\\Long\\Spark\\chat4.txt")//使用文本文件创建RDD var per = rdd.map(x => (x.split(",")(0)))//数组0下标表示的是姓名 per.distinct().count()//distinct是转换操作,目的是为了去重,count是行动操作,会直接统计元素的个数并输出 —————————————————————————————————————————— var tem = rdd.map{row => var splits = row.split(",");(splits(0),splits(1),splits(2).toInt)} tem.map(x => x._1).distinct().count
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4hvzEt8-1656335295914)(C:/Users/dell/AppData/Roaming/Typora/typora-user-images/image-20220625171550352.png)]
该系共开设了多少门课程
var per = rdd.map(x => (x.split(",")(1)))//下标1是课程名 per.distinct().count() —————————————————————————————————————————— tem.map(x => x._1).distinct().count
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zOeKimyI-1656335295916)(C:/Users/dell/AppData/Roaming/Typora/typora-user-images/image-20220625171756016.png)]
Tom 同学的总成绩平均分是多少
name.map(row => (row.split(",")(0),row.split(",")(2).toInt)).mapValues(x => (x,1)).reduceByKey((x,y) => (x._1+y._1,x._2+y._2)).mapValues(x => (x._1/x._2)).collect ———————————————————————————————————————————— tem.filter(x => x._1 == "Tom").map(x => (x._1,x._3)).mapValues(x => (x,1)).reduceByKey((x,y) => (x._1+y._1,x._2+y._2)).mapValues(x => x._1/x._2).fore ach(println)
求每名同学的选修的课程门数
rdd.map(row => (row.split(",")(0),row.split(",")(1))).mapValues(x => (x,1)).reduceByKey((x,y) => ("",x._2+y._2)).mapValues(x => x._2).foreach(println)//("",x._2+y._2)前的这个双引号一定要加,不然会报类型匹配错误—————————————————————————————————————————————————————————————————————————————————————————————————————————————— tem.map(x => (x._1,x._2)).mapValues(x => (x,1)).reduceByKey((x,y) => ("",x._2+y._2)).mapValues(x => x._2).foreach(println)
该系 DataBase 课程共有多少人选修
val total = rdd.filter(row => row.split(",")(1)=="DataBase") total.count() //total.map(row => (row.split(",")(1),row.split(",")(0))).mapValues(x => (x,1)).reduceByKey((x,y) => ("",x._2+y._2)).mapVules(x =>x._2).foreach(println) —————————————————————————————————————————————————————————————————————————————— tem.filter(x => x._2 == "DataBase").map(x =>x._1).distinct().count
各门课程的平均分是多少
rdd.map(row => (row.split(",")(1),row.split(",")(2).toInt)).mapValues(x => (x,1)).reduceByKey((x1,x2) => (x1._1+x2._1,x1._2+x2._2)).mapValues(x => x._1/x._2).foreach(println)—————————————————————————————————————————————————————————————————————————————————————————————————— tem.map(x => (x._2,x._3)).mapValues(x => (x,1)).reduceByKey((x,y) => (x._1+y._1,x._2+y._2)).mapValues(x => x._1/x._2).foreach(println)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ulFvphFY-1656335295916)(C:/Users/dell/AppData/Roaming/Typora/typora-user-images/image-20220625200010181.png)]
词频统计
var rdd = sc.textFile("D:\\Long\\Spark\\word.txt")
var ree = rdd.flatMap(row => row.split(" "))//这里用flatMap而不是map的原因是因为每一行有很多单词,有很多行。用flatMap就可以将不同的集合合并为一个集合
var ree1 = ree.map(word => (word,1))//这里用map而不是mapValues是因为这里不是键值对形式,所以无法使用mapValues
ree1.reduceByKey((x,y) => x+y).mapValues(x => x).foreach(println)
林子雨spark scala版编程小结相关推荐
- 林子雨-Spark入门教程(Python版)-学习笔记(二)
第3章 Spark编程基础 从文件加载数据 从文件系统中加载数据创建RDD--textFile()方法,该方法把文件的URI作为参数 注意: (1)本地文件系统的路径,必须要保证在所有的worker节 ...
- 林子雨-Spark入门教程(Python版)-学习笔记(一)
第1章 Spark的设计与运行原理 简介 hadoop中计算框架MapReduce的缺点: 表能能力有限,计算都必须要转化成Map和Reduce两个操作,难以表示复杂场景 IO开销大,中间结果写入到磁 ...
- 《大数据处理技术Spark》--林子雨
从林子雨老师的网课上学到的东西,林老师讲的特别清晰,记录一下,防止忘记. 以下是资料的链接: hadoop安装 课程 课件链接 其他资料: Spark-SQL之DataFrame操作大全 文章目录 1 ...
- spark的JDBC连接池(Scala版),及wordCount的结果保存到MySql中
一个Scala版的连接池,并在使用Spark Streaming进行Word Count时,把每批数据都存到mySql中 这里判断的两个空不能去掉,可能有人以为在调用getDriver方法时已经判断过 ...
- 大数据技术原理与应用 第三版 林子雨 期末复习(二) Hadoop HDFS HBase
大数据技术原理与应用 第三版 林子雨 期末复习(二) Hadoop HDFS HBase Hadoop生态系统 HDFS HDFS结构 块 Name Node与Second Name Node与Dat ...
- spark学习-57-Spark下Scala版HBase下的根据权重获取最真实数据
@[TOC] Scala版HBase下的根据权重获取最真实数据 和 java版HBase下的根据权重获取最真实数据 虽然处理流程相同,但是有很多细节需要注意 看这个之前先看 java版HBase下的根 ...
- 大数据技术原理与应用—第10讲 Spark(林子雨老师)课后习题
以下是慕课上林子雨老师,大数据原理及应用的第十讲习题答案.仅供大家学习参考. 10.RDD,中文全称是 (==弹性分布式数据 ==),是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型. 多 ...
- 大数据技术原理与应用课后题(林子雨)
大数据技术原理与应用(林子雨) 第1章 大数据概述 1单选(2分) 第三次信息化浪潮的标志是: A.个人电脑的普及 B.云计算.大数据.物联网技术的普及 C.虚拟现实技术的普及 D.互联网的普及 正确 ...
- Scala入门到精通——第二十九节 Scala数据库编程
本节主要内容 Scala Mavenproject的创建 Scala JDBC方式訪问MySQL Slick简单介绍 Slick数据库编程实战 SQL与Slick相互转换 本课程在多数内容是在官方教程 ...
- 第二章 Spark RDD以及编程接口
第二章 Spark RDD以及编程接口 目录 Spark程序"Hello World" Spark RDD 创建操作 转换操作 控制操作 行动操作 注:学习<Spark大数据 ...
最新文章
- Zookeeper应用场景理解
- Android activity之间的滑入切换
- oracle 更新记录语句,Oracle语句自动判断是要更新记录还是要插入记录
- AngularJs ng-route路由详解
- 7.4.7 2DPCA
- python从语音生成语谱图
- 不如跳舞!伯克利的舞蹈动作迁移效果逆天
- 11-散列1 电话聊天狂人(25 分)
- Ubuntu14.04上安装Jupyter的方法
- 从Slice_Header学习H.264(三.2)--相关细节之 参考图像列表
- 基于Java开发的Java毕业设计实战项目
- 显卡4k性能测试软件,碰上UHD都得跪 AN新一代显卡4K对比横评
- c语言头文件下载微盘,c语言头文件下载 C语言头文件大全.doc
- 新手学计算机剪辑,视频剪辑软件入门推荐!最适合初学者的四大软件!手机电脑都可以...
- 深入理解c++之struct构造函数
- python中 f代表什么_python 中下拉框中的f,v,m是什么意思??
- 用标志域tag判断队空队满的入队和出队算法
- Mockplus Cloud自动生成规格,Mockplus Cloud交互式动画原型
- 放大后字体变形的一点思考
- 什么软件能把蓝底换白底
热门文章
- mysql命令更新数据库_命令操作MySQL数据库
- android自动开机慢,手机开机慢怎么回事?安卓手机开机慢的原因和解决方法图文详解...
- spss数据分析_排序数据_计算变量
- 什么是DC-DC转换器?DC-DC转换器是如何命名的?
- 贼心不死安cuda记录-双显卡笔记本Ubuntu安装cuda9.0
- K3CLOUD 常用数据表
- GB2312, BIG5, UTF8, Unicode之间的互换
- 基于STM32F405平台的多摩川协议编码器通讯过程(2)
- 一台伺服驱动器可以带动多台伺服电机吗?
- 高速PCB设计之阻焊层和助焊层的检查