安装Spark与Python练习

一、安装Spark

  1.检查基础环境hadoop,jdk

 

 

   

  2.下载spark

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

  4.配置文件

 

  

  5.环境变量 

  6.试运行Python代码

 

 

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

  1.准备文本文件

  2.读文件,预处理:大小写,标点符号,停用词,分词,统计每个单词出现的次数,按词频大小排序

 

 

  7.结果写文件

 

一、 RDD创建

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

 

 

  

  2.从HDFS加载数据创建RDD
  启动hdfs

  上传文件 查看文件

  停止hdfs

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

  字符串

  numpy生成数组

 

 

 

二、 RDD操作

转换操作

1.转换操作

  1.filter(func)
  显式定义函数
  lambda函数

  2.map(func)
  显式定义函数
  lambda函数

  字符串分词

  数字加100

  字符串加固定前缀

  3.latMap(func)

    1.分词

    2.单词映射成键值对

  4.reduceByKey()

    1.统计词频,累加

    2.乘法规则

  5.groupByKey()

    1.单词分组

    2.查看分组的内容

    3.分组之后做累加 map

  6.sortByKey()

    1.词频统计按单词排序

  7.sortBy()

    1.词频统计按词频排序

 

 

 

行动操作

  1. foreach(print)

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

  2. collect()

  3.count()

  4.take(n)

  5.reduce()
  数值型的rdd元素做累加

  与reduceByKey区别
  1.reduce:把RDD中的每一个元素拿出来处理并形成一个新的RDD元素

  2.reduceByKey,把RDD中的key相同的一组数据拿出来处理,形成一个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. 一句话实现:文件入文件出

      lines = sc.textFile("hdfs://localhost:9000/user/hadoop/test.txt").flatMap(lambda line: line.split()).flatMap(lambda line: re.split(r'\W', line)).flatMap(lambda line: line.split()).map(lambda word: word.lower()).filter(lambda x: x not in stopwords).filter(lambda x: len(x) > 2).map(lambda a: (a, 1)).reduceByKey(lambda a, b: a + b).sortBy(lambda x: x[1], False)

      C.和作业2的“二、Python编程练习:英文文本的词频统计 ”进行比较,理解Spark编程的特点。

       Spark运行速度快、易用性好、通用性强和随处运行。

 

      二、求Top值

    

 

一、集合运算练习

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

 

二、内连接与外连接

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

 

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

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

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

  • 生成(姓名,课程分数)键值对RDD,观察keys(),values()
  • 每个学生选修了多少门课?map(), countByKey()
  • 每门课程有多少个学生选?map(), countByValue() 
  • 有多少个100分?
  • Tom选修了几门课?每门课多少分?filter(), map() RDD
  • Tom选修了几门课?每门课多少分?map(),lookup()  list
  • Tom的成绩按分数大小排序。filter(), map(), sortBy()
  • Tom的平均分。map(),lookup(),mean()
  • 生成(课程,分数)RDD,观察keys(),values()
  • 每个分数+20分。mapValues(func)
  • 每个分数+20分。map(func)
  • 并查看不及格人数的变化
  • 求每门课的选修人数及平均分

    • lookup(),np.mean()实现
    • reduceByKey()和collectAsMap()实现
    •  combineByKey(),map(),round()实现,确到2位小数

    •  比较几种方法的异同

    •  

      1.分析SparkSQL出现的原因,并简述SparkSQL的起源与发展。

      • SparkSQL出现的原因

        hive是shark的前身,shark是sparkSQL的前身,sparkSQL产生的根本原因是其完全脱离了hive的限制,hive是hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序复杂性。同时也由于MapReduce的计算执行效率很慢,因此spark SQL就这样出来,就是将spark SQL转换成RDD,然后提交到集群上执行,这样效率就非常快。

      • SparkSQL的起源

        在三四年前,Hive可以说是SQL on Hadoop的唯一选择,负责将SQL编译成可扩展的MapReduce作业。鉴于Hive的性能以及与Spark的兼容,Shark项目由此而生。

        Shark即Hive on Spark,本质上是通过Hive的HQL解析,把HQL翻译成Spark上的RDD操作,然后通过Hive的metadata获取数据库里的表信息,实际HDFS上的数据和文件,会由Shark获取并放到Spark上运算。

        Shark的最大特性就是快和与Hive的完全兼容,且可以在shell模式下使用rdd2sql()这样的API,把HQL得到的结果集,继续在scala环境下运算,支持自己编写简单的机器学习或简单分析处理函数,对HQL结果进一步分析计算。

      • SparkSQL的发展

        在2014年7月1日的Spark Summit上,Databricks宣布终止对Shark的开发,将重点放到Spark SQL上。

        Databricks表示,Spark SQL将涵盖Shark的所有特性,用户可以从Shark 0.9进行无缝的升级。

        Databricks推广的Shark相关项目一共有两个,分别是Spark SQL和新的Hive on Spark(HIVE-7292)

        Databricks表示,Shark更多是对Hive的改造,替换了Hive的物理执行引擎,因此会有一个很快的速度。然而,不容忽视的是,Shark继承了大量的Hive代码,因此给优化和维护带来了大量的麻烦。

      2.简述RDD 和DataFrame的联系与区别?

      区别:
        RDD是分布式的java对象的集合,但是对象内部结构对于RDD而言却是不可知的。
        DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息,相当于关系数据库中的一张表。

      联系:
        1.都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利。
        2、都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action才会运算。
        3.都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出
        4、三者都有partition的概念。
        5.三者有许多共同的函数,如filter,排序等。

      3.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的区别

       

       

         区别:RDD是直接输出对象,DataFrame是以对象里面的的详细结构进行输出

      3.2 DataFrame的保存

        df.write.text(dir)

        df.write.json(dri)

        df.write.parquet(dir)

       

       

       

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

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

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

       

       

       

       

       

      4.选择题:

      4.1单选(2分)‍关于Shark,下面描述正确的是:C

        A.Shark提供了类似Pig的功能

        B.Shark把SQL语句转换成MapReduce作业

        C.Shark重用了Hive中的HiveQL解析、逻辑执行计划翻译、执行计划优化等逻辑

        D.Shark的性能比Hive差很多

       

      4.2单选(2分)‏下面关于Spark SQL架构的描述错误的是:D

        A.在Shark原有的架构上重写了逻辑执行计划的优化部分,解决了Shark存在的问题

        B.Spark SQL在Hive兼容层面仅依赖HiveQL解析和Hive元数据

        C.Spark SQL执行计划生成和优化都由Catalyst(函数式关系查询优化框架)负责

        D.Spark SQL执行计划生成和优化需要依赖Hive来完成

       

      4.3单选(2分)‌要把一个DataFrame保存到people.json文件中,下面语句哪个是正确的:A

        A.df.write.json("people.json")

        B.df.json("people.json")

        C.df.write.format("csv").save("people.json")

        D.df.write.csv("people.json")

       

      4.4多选(3分)‎Shark的设计导致了两个问题:AC

        A.执行计划优化完全依赖于Hive,不方便添加新的优化策略

        B.执行计划优化不依赖于Hive,方便添加新的优化策略

        C.Spark是线程级并行,而MapReduce是进程级并行,因此,Spark在兼容Hive的实现上存在线程安全问题,导致Shark不得不使用另外一套独立维护的、打了补丁的Hive源码分支

        D.Spark是进程级并行,而MapReduce是线程级并行,因此,Spark在兼容Hive的实现上存在线程安全问题,导致Shark不得不使用另外一套独立维护的、打了补丁的Hive源码分支

       

      4.5 多选(3分)‌下面关于为什么推出Spark SQL的原因的描述正确的是:AB

        A.Spark SQL可以提供DataFrame API,可以对内部和外部各种数据源执行各种关系操作

        B.可以支持大量的数据源和数据分析算法,组合使用Spark SQL和Spark MLlib,可以融合传统关系数据库的结构化数据管理能力和机器学习算法的数据处理能力

        C.Spark SQL无法对各种不同的数据源进行整合

        D.Spark SQL无法融合结构化数据管理能力和机器学习算法的数据处理能力

       

      4.6多选(3分)‌下面关于DataFrame的描述正确的是:ABCD

        A.DataFrame的推出,让Spark具备了处理大规模结构化数据的能力

        B.DataFrame比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能

        C.Spark能够轻松实现从MySQL到DataFrame的转化,并且支持SQL查询

        D.DataFrame是一种以RDD为基础的分布式数据集,提供了详细的结构信息

       

      4.7多选(3分)‏要读取people.json文件生成DataFrame,可以使用下面哪些命令:AC

        A.spark.read.json("people.json")

        B.spark.read.parquet("people.json")

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

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

      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

          pandas中DataFrame转换为Pyspark中DataFrame

       

          

      6.从RDD转换得到DataFrame

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

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

          每个RDD元素转换成 Row

          由Row-RDD转换到DataFrame

          

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

          #下面生成“表头” 

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

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

          

      6.选择题 

      6.1单选(2分)以下操作中,哪个不是DataFrame的常用操作:D

        A.printSchema()

        B.select()

        C.filter()

        D.sendto()

       

      6.2多选(3分)‏从RDD转换得到DataFrame包含两种典型方法,分别是:AB

        A.利用反射机制推断RDD模式

        B.使用编程方式定义RDD模式

        C.利用投影机制推断RDD模式

        D.利用互联机制推断RDD模式

       

      6.3多选(3分)‍使用编程方式定义RDD模式时,主要包括哪三个步骤:ABD

        A.制作“表头”

        B.制作“表中的记录”

        C.制作映射表

        D.把“表头”和“表中的记录”拼装在一起

 
好文要顶 
posted @ 2022-06-05 21:31  塞纳河没有冰期  阅读(73)  评论(0编辑  收藏  举报