我只是想知道在Apache Spark中RDD和DataFrame (Spark 2.0.0 DataFrame是Dataset[Row]types别名)之间的区别是什么? 你可以转换一个到另一个?
从火花2.0.1开始我有一些问题。 我读了很多文档,但到目前为止找不到足够的答案: 有什么区别 df.select("foo") df.select($"foo") 我是否正确理解这一点 myDataSet.map(foo.someVal)是types安全的,不会转换为RDD但保持DataSet表示forms/无额外的开销(2.0.0性能) 所有其他命令,如select,..只是语法糖。 它们不是types安全的,可以使用地图代替。 我怎么能df.select("foo")types安全没有地图声明? 为什么我应该使用UDF / UADF而不是地图(假设地图停留在数据集表示中)?
当我尝试在我的代码中做同样的事情,如下所述 dataframe.map(row => { val row1 = row.getAs[String](1) val make = if (row1.toLowerCase == "tesla") "S" else row1 Row(row(0),make,row(2)) }) 我从这里采取上述参考: 斯卡拉:我怎样才能在Dataframs中使用scalareplace值但是我得到编码器错误 无法find存储在数据集中的types的编码器。 原始types(Int,S tring等)和产品types(case类)通过导入spark.im plicits._支持序列化其他types将在未来版本中添加。 注意:我正在使用spark 2.0!
据介绍Spark数据集 : 当我们期待Spark 2.0时,我们计划对数据集进行一些令人振奋的改进,特别是:…自定义编码器 – 当我们目前自动生成各种类型的编码器时,我们希望打开自定义对象的API。 并尝试将自定义类型存储在Dataset集中导致出现以下错误: 无法找到存储在数据集中的类型的编码器。 通过导入sqlContext.implicits._支持原始类型(Int,String等)和产品类型(case类)。支持序列化其他类型将在未来版本中添加 要么: Java.lang.UnsupportedOperationException:没有找到编码器…. 是否有任何现有的解决方法? 请注意,此问题仅作为社区Wiki答案的入口点存在。 随时更新/改善问题和答案。