gpt4 book ai didi

scala - Spark : How can DataFrame be Dataset[Row] if DataFrame's have a schema

转载 作者:行者123 更新时间:2023-12-03 18:42:03 26 4
gpt4 key购买 nike

This article 声称 Spark 中的 DataFrame 等效于 Dataset[Row] ,但 this blog post 表明 DataFrame 具有模式。

以博客文章中将 RDD 转换为 DataFrame 的示例:如果 DataFrameDataset[Row] 相同,那么将 RDD 转换为 DataFrame 应该很简单

val rddToDF = rdd.map(value => Row(value))

但相反它表明它是这个

val rddStringToRowRDD = rdd.map(value => Row(value))
val dfschema = StructType(Array(StructField("value",StringType)))
val rddToDF = sparkSession.createDataFrame(rddStringToRowRDD,dfschema)
val rDDToDataSet = rddToDF.as[String]

显然,数据框实际上是行和模式的数据集。

最佳答案

在 Spark 2.0 中,代码中有:type DataFrame = Dataset[Row]
它是 Dataset[Row] ,只是因为定义。
Dataset 也有模式,你可以使用 printSchema() 函数打印它。通常 Spark 会推断模式,因此您不必自己编写它 - 但它仍然存在;)

您还可以执行 createTempView(name) 并在 SQL 查询中使用它,就像 DataFrames 一样。

换句话说, Dataset = DataFrame from Spark 1.5 + encoder ,它将行转换为您的类。在 Spark 2.0 中合并类型后,DataFrame 成为 Dataset[Row] 的别名,因此没有指定编码器。

关于转换: rdd.map() 也返回 RDD ,它从不返回 DataFrame。你可以做:

// Dataset[Row]=DataFrame, without encoder
val rddToDF = sparkSession.createDataFrame(rdd)
// And now it has information, that encoder for String should be used - so it becomes Dataset[String]
val rDDToDataSet = rddToDF.as[String]

// however, it can be shortened to:
val dataset = sparkSession.createDataset(rdd)

关于scala - Spark : How can DataFrame be Dataset[Row] if DataFrame's have a schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39915086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com