Spark与DF对比

时间:2017-04-12 18:48:13

标签: scala apache-spark

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

使用数据集API一天后,我发现几乎所有操作都会将我带到DataFrame(例如withColumn)。在使用toDS转换RDD后,我经常发现需要另一次转换为DataSet,因为有些东西再次将我带到了DataFrame。

我是否错误地使用了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

1 个答案:

答案 0 :(得分:4)

Michael Armburst很好地解释了转移到数据集和数据框架以及两者之间的区别。基本上在spark 2.x中,他们将数据集和数据帧API聚合成一个略有差异的API。 " DataFrame只是通用行对象的DataSet。当你不了解所有领域时,DF就是答案"。 https://www.youtube.com/watch?v=1a4pgYzeFwE