我知道可以使用rdd.toDS将RDD转换为数据集。但是,也存在rdd.toDF。真的有一个相对于另一个的好处吗?

在玩了一天的Dataset API之后,我发现几乎所有的操作都将我带到DataFrame中(例如withColumn)。在使用toDS转换RDD之后,我经常发现需要对数据集进行另一次转换,因为再次将我带到了数据帧。

我使用API​​的方式有误吗?我应该坚持使用.toDF并仅在一系列操作的最后转换为DataSet吗?还是更早使用toDS有好处吗?

这是一个小的具体例子

spark
  .read
  .schema (...)
  .json (...)
  .rdd
  .zipWithUniqueId
  .map[(Integer,String,Double)] { case (row,id) => ... }
  .toDS // now with a Dataset API (should use toDF here?)
  .withColumnRenamed ("_1", "id" ) // now back to a DataFrame, not type safe :(
  .withColumnRenamed ("_2", "text")
  .withColumnRenamed ("_2", "overall")
  .as[ParsedReview] // back to a Dataset

最佳答案

迈克尔·阿姆伯斯特(Michael Armburst)很好地解释了转移到数据集和数据框以及两者之间的区别。基本上,在spark 2.x中,它们将数据集和数据框API融合为一个,只是略有不同。
“DataFrame只是通用行对象的DataSet。当您不知道所有字段时,DF就是答案”。
scala - Spark的toDS与DF-LMLPHP

关于scala - Spark的toDS与DF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43377393/

10-10 23:49