spark笔记之编写Spark SQL程序实现RDD转换成Da...

前面我们学习了如何在Spark Shell中使用SQL完成查询,现在我们通过IDEA编写Spark SQL查询程序。

Spark官网提供了两种方法来实现从RDD转换得到DataFrame,第一种方法是利用反射机制,推导包含某种类型的RDD,通过反射将其转换为指定类型的DataFrame,适用于提前知道RDD的schema。第二种方法通过编程接口与RDD进行交互获取schema,并动态创建DataFrame,在运行时决定列及其类型。

首先在maven项目的pom.xml中添加Spark SQL的依赖。

[AppleScript] 纯文本查看 复制代码

?

1

2

3

4

5

<dependency>

    <groupId>org.apache.spark</groupId>

    <artifactId>spark-sql_2.11</artifactId>

    <version>2.0.2</version>

</dependency>

1.1. 通过反射推断Schema

Scala支持使用case class类型导入RDD转换为DataFrame,通过case class创建schema,case class的参数名称会被利用反射机制作为列名。这种RDD可以高效的转换为DataFrame并注册为表。

代码如下:

spark笔记之编写Spark SQL程序实现RDD转换成Da..._第1张图片

spark笔记之编写Spark SQL程序实现RDD转换成Da..._第2张图片

spark笔记之编写Spark SQL程序实现RDD转换成Da..._第3张图片

spark笔记之编写Spark SQL程序实现RDD转换成Da..._第4张图片

 
 

1.2. 通过StructType直接指定Schema

当case class不能提前定义好时,可以通过以下三步创建DataFrame

(1)将RDD转为包含Row对象的RDD

(2)基于StructType类型创建schema,与第一步创建的RDD相匹配

(3)通过sparkSession的createDataFrame方法对第一步的RDD应用schema创建DataFrame

spark笔记之编写Spark SQL程序实现RDD转换成Da..._第5张图片

spark笔记之编写Spark SQL程序实现RDD转换成Da..._第6张图片

spark笔记之编写Spark SQL程序实现RDD转换成Da..._第7张图片

你可能感兴趣的:(技术文章)