嘗試將數據幀行映射到更新行時出現編碼器錯誤當我試圖在我的代碼中做同樣的事情,如下所述dataframe.map(row => {
val row1 = row.getAs[String](1)
val make = if (row1.toLowerCase == "tesla") "S" else row1 Row(row(0),make,row(2))})我從這里采取了上述參考: Scala:如何使用scala替換Dataframs中的值 但是我收到編碼器錯誤無法找到存儲在數據集中的類型的編碼器。導入spark.im plicits支持原始類型(Int,S tring等)和產品類型(case類)._將在以后的版本中添加對序列化其他類型的支持。注意:我正在使用spark 2.0!
2 回答

萬千封印
TA貢獻1891條經驗 獲得超3個贊
對于預先知道數據幀模式的情況,@ zero323給出的答案是解決方案
但是對于具有動態模式/或將多個數據幀傳遞給泛型函數的場景:以下代碼對我們起作用,同時從1.5.0遷移到2.2.0
import org.apache.spark.sql.Rowval df = Seq( (2012, "Tesla", "S"), (1997, "Ford", "E350"), (2015, "Chevy", "Volt") ).toDF("year", "make", "model")val data = df.rdd.map(row => { val row1 = row.getAs[String](1) val make = if (row1.toLowerCase == "tesla") "S" else row1 Row(row(0),make,row(2))})
此代碼在兩個版本的spark上執行。
缺點:數據幀/數據集api上的spark提供的優化不會被應用。
添加回答
舉報
0/150
提交
取消