2017-09-06 53 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 - 這將無法編譯。

相關問題