第十一周 SparkSql-极速上手SparkSql-5
1 | 之前已学完,spark core,离线数据计算 |
Spark SQL
1 | Spark SQL和我们之前讲Hive的时候说的hive on spark是不一样的。 |
SparkSession
1 | 要使用Spark SQL,首先需要创建一个SpakSession对象 |
创建DataFrame
1 | 使用SparkSession,可以从RDD、HIve表或者其它数据源创建DataFrame |
1 | 在项目中添加sql这个包名 |

scala

1 | package com.imooc.scala.sql |

java
1 | package com.imooc.java.sql; |

1 | 由于DataFrame等于DataSet[Row],它们两个可以互相转换,所以创建哪个都是一样的 |
1 | 尝试对他们进行转换 |
DataFrame常见算子操作
1 | 下面来看一下Spark sql中针对DataFrame常见的算子操作 |

1 | printSchema() |
scala
1 | package com.imooc.scala.sql |







java
1 | package com.imooc.java.sql; |
1 | 这些就是针对DataFrame的一些常见的操作。 |
DataFrame的sql操作
1 | 想要实现直接支持sql语句查询DataFrame中的数据 |
scala
1 | package com.imooc.scala.sql |

java
1 | package com.imooc.java.sql; |
RDD转换为DataFrame(包含DataFrame转RDD)
1 | 为什么要将RDD转换为DataFrame? |
反射方式
1 | 下面来看一下反射方式: |
scala
1 | package com.imooc.scala.sql |

java
1 | package com.imooc.java.sql; |
1 | package com.imooc.java.sql; |
1 | java类中快速为字段生成get,set方法,右键->generate->... |
编程方式
1 | 接下来是编程的方式 |
scala
1 | package com.imooc.scala.sql |
1 | IDEA编程时使用一个未知的东西,alt+回车,会提示需要导入的东西 |

java
1 | package com.imooc.java.sql; |
load和save操作
1 | 对于Spark SQL的DataFrame来说,无论是从什么数据源创建出来的DataFrame,都有一些共同的load和save操作。(不使用这两个方法,使用TextFile(),再转成DataFrame操作,再转RDD,saveAsText()也可以) |
1 | 我们如果使用原始的format和load方法加载数据, |
scala
1 | package com.imooc.scala.sql |


java
1 | package com.imooc.java.sql; |
SaveMode
1 | Spark SQL对于save操作,提供了不同的save mode。 |
1 | 在LoadAndSaveOpScala中增加SaveMode的设置,重新执行,验证结果 |

作业

内置函数
1 | Spark中提供了很多内置的函数 |
1 | 其实这里面的函数和hive中的函数是类似的 |
实战:TopN主播统计
1 |
|
1 | 最终需要的结果是这样的 |
1 | 分析一下具体步骤 |
scala
1 | package com.imooc.scala.sql |
1 | select |
1 | t3再select的结果 |


1 | t4的prinln(_)是这样时 |

1 | 最终结果 |

java
1 | package com.imooc.java.sql; |
1 | 代码执行结果如下: |
集群执行
1 | 新建一个object:TopNAnchorClusterScala,修改代码,将任务的输出数据保存到hdfs上面 |
1 | package com.imooc.scala.sql |
1 | 修改pom中依赖的配置,全部设置为provided |
1 | 针对spark-core和spark-sql在打包的时候是不需要的,针对fastjson有的spark job是需要的,不过建议 |
1 | [root@bigdata04 sparkjars]# vi topnJob.sh |
1 | 提交任务 |
