2017-09-06 26 views
0

一些如何在Spark2.0,我可以使用Dataframe.map(r => r.getAs[String]("field"))没有问题Spark2.0中的Dataset.map(r => xx)和Dataframe.map(r => xx)有什么区别?

DataSet.map(r => r.getAs[String]("field"))给出错误r不具备“getAs”的方法。

是什么在DataSetrDataFramer之间的差异,为什么r.getAs只有DataFrame的作品?

在StackOverflow上做了一些研究之后,我发现了一个有用的答案在这里

Encoder error while trying to map dataframe row to updated row

希望它有助于

+2

它们是什么类型的数据集? 'getAs'是'Row'上的一个方法,所以你只能使用'r.getAs','r'是'Row''(即你的数据集是'DataSet [Row]',注意'DataFrame'只是'DataSet [Row]'的别名) – puhlen

+0

谢谢。我使用了数据集[_]。当我做DataSet.map(r => xx)时,什么是r?它是一排数据吗? @puhlen – rileyss

+0

不,'r'是'Any',因为你没有指定它的类型 – puhlen

回答

3

Dataset有一个类型参数:class Dataset[T]T是数据集中每条记录的类型。那T可能是任何东西(好吧,任何你可以提供暗示Encoder[T],但除此之外)。

Dataset一个map操作适用于所提供的功能,每个记录,所以在你表现将有类型T地图操作r

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

相关问题