如何从 Spark 2.0 中的 DataFrame 列创建数据集?

Posted

技术标签:

【中文标题】如何从 Spark 2.0 中的 DataFrame 列创建数据集?【英文标题】:How to create Dataset from DataFrame column in Spark 2.0? 【发布时间】:2016-12-06 10:32:02 【问题描述】:

是否可以从 Spark 2.0 中的 Dataframe 列创建数据集? 我有以下问题:我想从按日期分区的镶木地板数据中读取一些数据,然后将其中一列转换为 Dataset。 示例:

val frame = spark.read.parquet(path).select($"date", $"object".as[MyObjectType]).filter($"date" > "2016-10-01")

现在,我需要将第二列转换为 Dataset[MyObjectType] 并且不明白我该怎么做。 MyObjectType 是 scala 产品类型

【问题讨论】:

【参考方案1】:

你可以cast:

val frame = spark.read.parquet(path)
    .select($"date", $"object".cast(MyObjectTypeUDT))
    .filter($"date" > "2016-10-01")

在这种情况下,MyObjectTypeUDT 是 SQL 类型之一,即 StringType 或 IntegerType 或自定义 UserDefinedType。

或者,如果您有一些代表数据集中内容的类:

case clas DateWithObject (date : Timestamp, object: MyObject)

然后你可以写:

val frame = spark.read.parquet(path)
    .select($"date", $"object")
    .as[DateWithObject] 
    .filter($"date" > "2016-10-01")

我认为这是最简单的方法

【讨论】:

以上是关于如何从 Spark 2.0 中的 DataFrame 列创建数据集?的主要内容,如果未能解决你的问题,请参考以下文章

Spark 2.0 作为 HortonWorks 集群中的技术预览

Spark 2.0:如何将元组的 RDD 转换为 DF [重复]

无法从直线访问 Spark 2.0 临时表

我们如何在 SPARK 2.2.0 中将外部表转换为托管表?

无法过滤存储在 spark 2.2.0 数据框中的 CSV 列

Spark将单列转换为数组