补交作业

共补交2,4,5,6,7的作业  原因:之前没注意交作业的时间不小心错过了

作业2:安装Sprk与Python练习

一、安装Spark

1.检查基础环境hadoop,

2.下载spark

3.解压,文件夹重命名、权限

4.配置文件

5.环境变量

6.试运行Python代码

 

 

二、Python编程练习:英文文本的词频统计

  1. 准备文本文件
  2. 读文件
  3. 预处理:大小写,标点符号,停用词
  4. 分词
  5. 统计每个单词出现的次数
  6. 按词频大小排序
  7. 结果写文件

 

 

 

作业4:RDD操作

一、 RDD创建

1.从本地文件系统中加载数据创建RDD

2.从HDFS加载数据创建RDD

启动hdfs

上传文件

查看文件

加载

停止hdfs

3.通过并行集合(列表)创建RDD

输入列表、字符串、numpy生成数组

二、 RDD操作

转换操作

1.map(func)
显式定义函数

lambda函数

数字加100

1)、显示定义函数

2)、lambda函数

字符串加固定前缀

1)、显示定义函数

2)、lambda函数

2.filter(func)
1)lambda函数

2)显式定义函数

3.flatMap(func)

分词

单词映射成键值对

4.reduceByKey()

统计词频,累加

乘法规则

5.reduceByKey()

单词分组

查看分组的内容

 分组之后做累加map

6.sortByKey()

词频统计按照词频排序

 

行动操作

1.foreach(func)

foreach(print)

foreach(lambda a:print(a.upper()))

2.collect()

3.count()

4.first()

5.take(n)

6.reduce(func)

 

作业五:RDD操作综合实例

一、词频统计

A. 分步骤实现

 

1.准备文件

    1.下载小说或长篇新闻稿

    2.上传到hdfs上

 

 

2.读文件创建RDD

 

 

3.分词

 

 

4.排除大小写lower(),map()
标点符号re.split(pattern,str),flatMap(),
停用词,可网盘下载stopwords.txt,filter(),
长度小于2的词filter()

 

 

 

 

 

 

 

 

5.统计词频

 

 

6.按词频排序

 

 

7.输出到文件

 

 

 

 

8.查看结果

 

 B. 一句话实现:文件入文件出

 

 

 

 

二、求Top值

网盘下载payment.txt文件,通过RDD操作实现选出最大支付额的用户。

1.丢弃不合规范的行:

    (1)空行

    (2)少数据项

    (3)缺失数据

 

 

 

 

 

 

 

 

2.支付金额转换为数值型,按支付金额排序

 

 

3.取出Top3

 

 

作业六:RDD综合练习:更丰富的操作

集合运算练习

union(), intersection(),subtract(), cartesian()

 

 

 

内连接与外连接

join(), leftOuterJoin(), rightOuterJoin(), fullOuterJoin( )

 

 

 

三、综合练习:学生课程分数

网盘下载sc.txt文件,通过RDD操作实现以下数据分析:

  • 持久化 scm.cache()
  • 总共有多少学生?map(), distinct(), count()
  • 开设了多少门课程?

 

 

 

 

 

 

 

  • 生成(姓名,课程分数)键值对RDD,观察keys(),values()
  •  

     

  • 每个学生选修了多少门课?map(), countByKey()
  •  

     

  • 每门课程有多少个学生选?map(), countByValue() 
  •  

     

  • t有多少个100分?
  •  

     

  • Tom选修了几门课?每门课多少分?filter(), map() RDD
  •  

     

     

     

     

  • Tom选修了几门课?每门课多少分?map(),lookup()  list
  •  

     

  • Tom的成绩按分数大小排序。filter(), map(), sortBy()
  •  

     

  • Tom的平均分。map(),lookup(),mean()

 

 

 

 

  • 生成(姓名课程,分数)RDD,观察keys(),values()
  • 每个分数+20平时分。
    分别用mapValues(func)和 map(func)实现。
    并查看不及格人数的变化。
  • 求每门课的选修人数及平均分
  • lookup(),np.mean()实现
    • combineByKey(),map(),round()实现,确到2位小数
    • 作业七:Spark SQL
    • 1.请分析SparkSQL出现的原因,并简述SparkSQL的起源与发展
    • SparkSQL的前身Shark对于Hive的太多依赖(如采用Hive的语法解析器、查询优化器等等),制约了Spark的One Stack Rule Them All的既定方针,制约了Spark各个组件的相互集成,所以提出了SparkSQL项目。SparkSQL抛弃原有Shark的代码,汲取了Shark的一些优点,如内存列存储(In-Memory Columnar Storage)、Hive兼容性等,重新开发了SparkSQL代码;由于摆脱了对Hive的依赖性,SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的提升。SparkSQL的出现,解决了对不同数据源和不同数据的操作,例如结构化和非结构化数据。还有可以支持融合关系查询和复杂分析算法。
    • 2. 简述RDD 和DataFrame的联系与区别?
    • Spark RDD
      RDD是一种弹性分布式数据集,是一种只读分区数据。它是spark的基础数据结构,具有内存计算能力、数据容错性以及数据不可修改特性。

      Spark Dataframe
      Dataframe也是一种不可修改的分布式数据集合,它可以按列查询数据,类似于关系数据库里面的表结构。可以对数据指定数据模式(schema)。

      共同点

      RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,在处理超大型数据提供便利。

      都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不担心会内存溢出。

      都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,三者才会开始遍历运算,极端情况下,如果代码里面有创建、转换,但是后面没有在Action中使用对应的结果,在执行时会被直接跳过。

      不同点:

      RDD不支持sparkSQL操作。

      RDD总是搭配spark mlib使用。

      DataFrame每一行的类型固定为Row,只有通过解析才能获取各个字段的值。

      DataFrame总是搭配spark ml使用。

      DataFrame支持一些特别方便的保存方式,比如保存成csv,可以带上表头,这样每一列的字段名一目了然。

    • 3.1 PySpark-DataFrame创建:

      spark.read.text(url)

      spark.read.json(url) 

      spark.read.format("text").load("people.txt")

      spark.read.format("json").load("people.json")

      描述从不同文件类型生成DataFrame的区别。

      用相同的txt或json文件,同时创建RDD,比较RDD与DataFrame的区别。

      3.2 DataFrame的保存

      df.write.text(dir)

      df.write.json(dri)

      df.write.format("text").save(dir)

      df.write.format("json").save(dir)

      df.write.format("json").save(dir)

      5. PySpark-DataFrame各种常用操作

      基于df的操作:

      打印数据 df.show()默认打印前20条数据

      打印概要 df.printSchema()

      查询总行数 df.count()

      df.head(3) #list类型,list中每个元素是Row类

      输出全部行 df.collect() #list类型,list中每个元素是Row类

      查询概况 df.describe().show()

      取列 df[‘name’], df.name, df[1]

      选择 df.select() 每个人的年龄+1

      筛选 df.filter() 20岁以上的人员信息

      筛选年龄为空的人员信息

      分组df.groupBy() 统计每个年龄的人数

      排序df.sortBy() 按年龄进行排序

      基于spark.sql的操作

      创建临时表 df.registerTempTable('people')

      spark.sql执行SQL语句 spark.sql('select name from people').show()

       

      pyspark中DataFrame与pandas中DataFrame

      分别从文件创建两种DataFrame

      查看两种df的区别

      pandas中DataFrame转换为Pyspark中DataFrame

      Pyspark中DataFrame转换为pandas中DataFrame

       

      6.从RDD转换得到DataFrame

      6.1 利用反射机制推断RDD模式

      创建RDD sc.textFile(url).map(),读文件,分割数据项

      每个RDD元素转换成 Row

      由Row-RDD转换到DataFrame

       

      6.2 使用编程方式定义RDD模式

      #下面生成“表头” 

      #下面生成“表中的记录” 

      #下面把“表头”和“表中的记录”拼装在一起

       

posted @ 2022-06-05 22:08  蓝晓群  阅读(43)  评论(0编辑  收藏  举报