林子雨sparkscala版编程小结(代码片段)

孤独之风。 孤独之风。     2022-10-21     160

关键词:

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.maprow => 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)

大数据技术原理与应用第三版林子雨期末复习大数据概述第一章p2

大数据技术原理与应用第三版林子雨期末复习(一)大数据概述第一章P2大数据概念(4V)三次信息化浪潮(每隔15年发生一次)大数据对于研究思维的影响数据产生的三个阶段大数据计算模式大数据与云计算、物联网概念云计... 查看详情

sparkscala基础操作(持续更新)(代码片段)

文章目录零、IDEA的scala环境配置一、scala特点1.1面向对象特性1.2函数式编程1.3静态类型二、代码简单测试栗子三、scalatrait(特征)四、常见问题4.1IDEA安装完插件Scala后通过addframeworkssupport找到不到scala插件Reference零、IDEA的... 查看详情

大数据技术原理与应用——林子雨老师mooc知识点一

...目录前言一、大数据概述前言大数据导论期末考试内容以林子雨老师的《大数据技术原理与应用》为主,这里整理一下林子雨老师慕课上的习题的知识点,帮助和大家进行复习。一、大数据概述第一次信息化浪潮标志是... 查看详情

spark实验四

...计算以下内容:(1)该系总共有多少学生;主讲教师:林子雨http://www.cs.xmu.edu.cn/linziyu第1页厦门大学林子雨,赖永炫,陶继平编著《Spark编程基础(Scala版)》教材配套机房上机实验指南实验4RDD编程初级实践(2)该系共开设来多少... 查看详情

单元小结(代码片段)

...度、ALS电梯调度。一、多项式加减运算这是熟悉面向对象编程思想的第一次实战作业,也是我第一次接触JAVA编程,虽然在编程中学习的过程是痛苦的,但那种所学即所得的欣喜也是不言而喻的。在实际编程过程中,相信大家均... 查看详情

concurrenthashmap源码阅读小结(代码片段)

...关源码分析的文章链接:ConcurrentHashMap扩容分析拾遗并发编程——ConcurrentHashMap#addCount()分析并发编程——C 查看详情

基于pyspark得地震数据处理与分析(代码片段)

项目来源厦门大学林子雨老师得Spark学习项目中,里面为部分项目代码和实验截图读取文件frompysparkimportSparkConf,SparkContextfrompyspark.sqlimportSparkSessionfrompyspark.ml.featureimportStringIndexer,IndexToStringfrompyspark.mlimportPipelineim 查看详情

面向对象基础小结(代码片段)

目录面向对象基础小结一、面向对象基础小结1.1面向对象编程1.2类与对象1.3对象的属性的查找顺序1.4给对象定制独有属性1.5对象的绑定方法1.6类与数据类型面向对象基础小结一、面向对象基础小结1.1面向对象编程面向过程编程:... 查看详情

ros1云课→23turtlesim绘制小结(数学和编程)(代码片段)

ROS1云课→22机器人轨迹跟踪这一节就有些乱了……机器人如何走出一个正方形的轨迹呢?这里,采用了官方例程中://draw_square#include<boost/bind.hpp>#include<ros/ros.h>#include<turtlesim/Pose.h>#include<geometry_msg 查看详情

python3基础语法小结与简单编程实操案例(代码片段)

...法数据类型控制语句输出格式函数与包文件读写面向对象编程实例No.1计算两数求和No.2判断是否闰年No.3判断是否质数No.4判断是否回文No.5斐波那契数列No.6打印九九乘法No.7简易的计时器No.8递归与二分法No.9选择排序算法No.10冒泡法... 查看详情

ac自动机-算法与应用小结(代码片段)

本文对AC自动机的算法以及基础应用略作总结。目录定义构造递推fail[]转移边的补充应用基础模式匹配P3796【模板】AC自动机(加强版)P3808【模板】AC自动机(简单版)P5357【模板】AC自动机(二次加强版)ACAMxDFS/BFS[POI2000]病毒[HNO... 查看详情

awk小结(代码片段)

awk工作原理介绍awk实际是一种编程语言,我们使用的是的GUN版本,主要使用其强大的分割,过滤功能,awk实际也是对文件进行逐行处理awk工作状态分为以下三种GEGINEND行处理前行处理中行处理后++++++小示例++++++++awk‘BEGINprint1/2print"... 查看详情

spark实验3

...南”栏目的“HDFS操作常用Shell命令”,厦门大学林子雨,赖永炫,陶继平编著《Spark编程基础(Scala版)》教材配套机房上机实验指南实验3Spark和Hadoop的安装主讲教师:林子雨http://www.cs.xmu.edu.cn/linziyu第2页使用Hadoop提供的She... 查看详情

python核心编程总结(五多任务编程之进程与线程)(代码片段)

✍、脑图时刻五、多任务编程之进程与线程✍、脑图时刻1、多任务编程1.1、多任务的概念1.2、多任务的执行方式1.3、进程1.4、多进程的使用1.4.1、获取进程编号1、获取当前进程编号2、获取当前父进程编号3、小结1.4.2、进程执行... 查看详情

python核心编程总结(五多任务编程之进程与线程)(代码片段)

✍、脑图时刻五、多任务编程之进程与线程✍、脑图时刻1、多任务编程1.1、多任务的概念1.2、多任务的执行方式1.3、进程1.4、多进程的使用1.4.1、获取进程编号1、获取当前进程编号2、获取当前父进程编号3、小结1.4.2、进程执行... 查看详情

「设计模式」六大原则之五:依赖倒置原则小结(代码片段)

...六大原则之六:最小知识原则小结六大原则体现很多编程的底层逻辑:高内聚、低耦合、面向对象编程、面向接口编程、面向抽象编程,最终实现可读、可复用、可维护性。设计模式的六大原则有:SingleResponsibilit... 查看详情

hdfs操作实验(代码片段)

...据库实验网站还是非常不错的,开源网站吹爆,我也想去林子雨老师那里读研究生了( 查看详情

教你如何在sparkscala/java应用中调用python脚本(代码片段)

摘要:本文将介绍如何在Sparkscala程序中调用Python脚本,Sparkjava程序调用的过程也大体相同。本文分享自华为云社区《【Spark】如何在SparkScala/Java应用中调用Python脚本》,作者:小兔子615。1.PythonRunner对于运行与JVM... 查看详情