[英]What's the difference between Dataset.map(r=>xx) and Dataframe.map(r=>xx) in Spark2.0?
在Spark2.0中,我可以如何使用Dataframe.map(r => r.getAs[String]("field"))
但是DataSet.map(r => r.getAs[String]("field"))
给出错误,指出r
没有“ getAs”方法。
什么之间的区别r
中DataSet
和r
在DataFrame
,为什么r.getAs
只适用于DataFrame
?
在StackOverflow中进行了一些研究之后,我在这里找到了一个有用的答案
希望对您有所帮助
Dataset
具有类型参数: class Dataset[T]
。 T
是数据集中每个记录的类型。 T
可能是任何东西(好吧,任何您可以为其提供隐式Encoder[T]
,但这都不重要)。
Dataset
上的map
操作将提供的功能应用于每个记录,因此您显示的映射操作中的r
将具有T
类型。
最后, DataFrame
实际上只是Dataset[Row]
的别名,这意味着每个记录的类型都是Row
。 并且Row
有一个名为getAs
的方法,该方法getAs
一个类型参数和一个String参数,因此您可以在任何Row
上调用getAs[String]("field")
。 对于任何没有此方法的T
来说-都将无法编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.