jka*_*brg 4 scala apache-spark apache-spark-sql apache-spark-dataset
这篇文章声称DataFrameSpark中的 a等同于 a Dataset[Row],但这篇博文表明 aDataFrame有一个架构。
以博客文章中将 RDD 转换为 a 的示例DataFrame:如果DataFrame与 相同Dataset[Row],那么将 an 转换RDD为 aDataFrame应该很简单
val rddToDF = rdd.map(value => Row(value))
Run Code Online (Sandbox Code Playgroud)
但相反它表明它是这个
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]
Run Code Online (Sandbox Code Playgroud)
显然,数据框实际上是行和模式的数据集。
在 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9040 次 |
| 最近记录: |