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+数据

  1. 该系总共有多少学生

    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)]

  2. 该系共开设了多少门课程

    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)]

  3. 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)
    

  4. 求每名同学的选修的课程门数

    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)
    
  5. 该系 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
    
  6. 各门课程的平均分是多少

    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)]

  7. 词频统计

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版编程小结相关推荐

  1. 林子雨-Spark入门教程(Python版)-学习笔记(二)

    第3章 Spark编程基础 从文件加载数据 从文件系统中加载数据创建RDD--textFile()方法,该方法把文件的URI作为参数 注意: (1)本地文件系统的路径,必须要保证在所有的worker节 ...

  2. 林子雨-Spark入门教程(Python版)-学习笔记(一)

    第1章 Spark的设计与运行原理 简介 hadoop中计算框架MapReduce的缺点: 表能能力有限,计算都必须要转化成Map和Reduce两个操作,难以表示复杂场景 IO开销大,中间结果写入到磁 ...

  3. 《大数据处理技术Spark》--林子雨

    从林子雨老师的网课上学到的东西,林老师讲的特别清晰,记录一下,防止忘记. 以下是资料的链接: hadoop安装 课程 课件链接 其他资料: Spark-SQL之DataFrame操作大全 文章目录 1 ...

  4. spark的JDBC连接池(Scala版),及wordCount的结果保存到MySql中

    一个Scala版的连接池,并在使用Spark Streaming进行Word Count时,把每批数据都存到mySql中 这里判断的两个空不能去掉,可能有人以为在调用getDriver方法时已经判断过 ...

  5. 大数据技术原理与应用 第三版 林子雨 期末复习(二) Hadoop HDFS HBase

    大数据技术原理与应用 第三版 林子雨 期末复习(二) Hadoop HDFS HBase Hadoop生态系统 HDFS HDFS结构 块 Name Node与Second Name Node与Dat ...

  6. spark学习-57-Spark下Scala版HBase下的根据权重获取最真实数据

    @[TOC] Scala版HBase下的根据权重获取最真实数据 和 java版HBase下的根据权重获取最真实数据 虽然处理流程相同,但是有很多细节需要注意 看这个之前先看 java版HBase下的根 ...

  7. 大数据技术原理与应用—第10讲 Spark(林子雨老师)课后习题

    以下是慕课上林子雨老师,大数据原理及应用的第十讲习题答案.仅供大家学习参考. 10.RDD,中文全称是 (==弹性分布式数据 ==),是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型. 多 ...

  8. 大数据技术原理与应用课后题(林子雨)

    大数据技术原理与应用(林子雨) 第1章 大数据概述 1单选(2分) 第三次信息化浪潮的标志是: A.个人电脑的普及 B.云计算.大数据.物联网技术的普及 C.虚拟现实技术的普及 D.互联网的普及 正确 ...

  9. Scala入门到精通——第二十九节 Scala数据库编程

    本节主要内容 Scala Mavenproject的创建 Scala JDBC方式訪问MySQL Slick简单介绍 Slick数据库编程实战 SQL与Slick相互转换 本课程在多数内容是在官方教程 ...

  10. 第二章 Spark RDD以及编程接口

    第二章 Spark RDD以及编程接口 目录 Spark程序"Hello World" Spark RDD 创建操作 转换操作 控制操作 行动操作 注:学习<Spark大数据 ...

最新文章

  1. Zookeeper应用场景理解
  2. Android activity之间的滑入切换
  3. oracle 更新记录语句,Oracle语句自动判断是要更新记录还是要插入记录
  4. AngularJs ng-route路由详解
  5. 7.4.7 2DPCA
  6. python从语音生成语谱图
  7. 不如跳舞!伯克利的舞蹈动作迁移效果逆天
  8. 11-散列1 电话聊天狂人(25 分)
  9. Ubuntu14.04上安装Jupyter的方法
  10. 从Slice_Header学习H.264(三.2)--相关细节之 参考图像列表
  11. 基于Java开发的Java毕业设计实战项目
  12. 显卡4k性能测试软件,碰上UHD都得跪 AN新一代显卡4K对比横评
  13. c语言头文件下载微盘,c语言头文件下载 C语言头文件大全.doc
  14. 新手学计算机剪辑,视频剪辑软件入门推荐!最适合初学者的四大软件!手机电脑都可以...
  15. 深入理解c++之struct构造函数
  16. python中 f代表什么_python 中下拉框中的f,v,m是什么意思??
  17. 用标志域tag判断队空队满的入队和出队算法
  18. Mockplus Cloud自动生成规格,Mockplus Cloud交互式动画原型
  19. 放大后字体变形的一点思考
  20. 什么软件能把蓝底换白底

热门文章

  1. mysql命令更新数据库_命令操作MySQL数据库
  2. android自动开机慢,手机开机慢怎么回事?安卓手机开机慢的原因和解决方法图文详解...
  3. spss数据分析_排序数据_计算变量
  4. 什么是DC-DC转换器?DC-DC转换器是如何命名的?
  5. 贼心不死安cuda记录-双显卡笔记本Ubuntu安装cuda9.0
  6. K3CLOUD 常用数据表
  7. GB2312, BIG5, UTF8, Unicode之间的互换
  8. 基于STM32F405平台的多摩川协议编码器通讯过程(2)
  9. 一台伺服驱动器可以带动多台伺服电机吗?
  10. 高速PCB设计之阻焊层和助焊层的检查