作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
This article 声称 Spark 中的 DataFrame
等效于 Dataset[Row]
,但 this blog post 表明 DataFrame
具有模式。
以博客文章中将 RDD 转换为 DataFrame
的示例:如果 DataFrame
与 Dataset[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/
我是一名优秀的程序员,十分优秀!