2016-09-30 27 views
1

我試圖在Spark 2.0.0中執行Dataset[Row]DataFrame)上的簡單映射。東西,因爲這Scala Spark中的編碼器[行]

val df: DataSet[Row] = ... 
df.map { r: Row => r } 

但編譯器抱怨我不提供隱含Encoder[Row]參數map函數一樣簡單:

沒有足夠的論據方法映射:(隱含的證據$ 7: 編碼器[行])。

一切工作正常,如果我轉換爲RDD第一ds.rdd.map { r: Row => r }但不應該有一個簡單的方法來得到一個Encoder[Row]像有是元組類型Encoders.product[(Int, Double)]

[注意我的動態以這樣一種方式,它不容易被轉換成一個強類型Dataset大小。]

回答

1

Encoder需要知道如何收拾內的元素。所以你可以使用row.structType來編寫自己的Encoder[Row],它在運行時確定你的的元素,並使用相應的解碼器。

或者如果您瞭解更多關於進入的數據,您可以使用https://github.com/adelbertc/frameless/