Spark SQL DataFrame与RDD交互

Spark SQL 支持两种不同的方法将现有 RDD 转换为 Datasets。

第一种方法使用反射来推断包含特定类型对象的 RDD 的 schema。当你在编写 Spark 应用程序时,你已经知道了 schema,这种基于反射的方法会使代码更简洁,并且运行良好。

第二种方法是通过编程接口来创建 DataSet,这种方法允许构建一个 schema,并将其应用到现有的 RDD 上。虽然这种方法更详细,但直到运行时才知道列及其类型,才能构造 DataSets。

1. 使用反射推导schema

Spark SQL 支持自动将 JavaBeans 的 RDD 转换为 DataFrame。使用反射获取的 BeanInfo 定义了表的 schema。目前为止,Spark SQL 还不支持包含 Map 字段的 JavaBean。但是支持嵌套的 JavaBeans,List 以及 Array 字段。你可以通过创建一个实现 Serializable 的类并为其所有字段设置 getter 和 setter 方法来创建一个 JavaBean。

Java版本:

Scala版本:

2. 使用编程方式指定Schema

当 JavaBean 类不能提前定义时(例如,记录的结构以字符串编码,或者解析文本数据集,不同用户字段映射方式不同),可以通过编程方式创建 DataSet,有如下三个步骤:

从原始 RDD(例如,JavaRDD

)创建 Rows 的 RDD(JavaRDD);

创建由 StructType 表示的 schema,与步骤1中创建的 RDD 中的 Rows 结构相匹配。

通过SparkSession提供的 createDataFrame 方法将 schema 应用到 Rows 的 RDD。

Java版本:

Scala版本:

Spark 版本: 2.3.1

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180719G00BMQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券