Spark2.0 中的 Dataset.map(r=>xx) 和 Dataframe.map(r=>xx) 有什么区别?



在Spark2.0中,我可以毫无问题地使用Dataframe.map(r => r.getAs[String]("field"))

但是DataSet.map(r => r.getAs[String]("field"))给出了错误,r没有"getAs"方法。

DataSet中的rDataFrame中的r有什么区别,为什么r.getAs仅适用于DataFrame

在StackOverflow中做了一些研究之后,我在这里找到了一个有用的答案。

尝试将数据帧行映射到更新的行时出现编码器错误

希望对您有所帮助

Dataset有一个类型参数:class Dataset[T]T是数据集中每条记录的类型。该T可能是任何东西(好吧,您可以为其提供隐式Encoder[T]的任何内容,但这不是重点)。

Datasetmap操作会将提供的函数应用于每条记录,因此您显示的映射操作中的r将具有T的类型。

最后,DataFrame实际上只是Dataset[Row]的别名,这意味着每条记录的类型都是RowRow有一个名为getAs的方法,它接受一个类型参数和一个 String 参数,因此你可以在任何Row上调用getAs[String]("field")。对于任何没有此方法的T- 这将无法编译。

相关内容

  • 没有找到相关文章

最新更新