解决升级Spark2.0之后,DataFrame map操作报错
生活随笔
收集整理的這篇文章主要介紹了
解决升级Spark2.0之后,DataFrame map操作报错
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當我們在使用spark1.6的時候,當我們創建SQLContext讀取一個文件之后,返回DataFrame類型的變量可以直接.map操作,不會報錯。但是升級之后會包一個錯誤,如下:
報錯:No implicits found for parameter evidence$6: Encoder[Unit]
主要的錯誤原因為:
******error: Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases. resDf_upd.map(row => {******此時有三種解決方案:
第一種:
然后大家發現不會在報錯誤了。
第二種:
這樣也可以
第三種:
這種是最麻煩的一種,可以參考官網
官網上給的是讓自定義一個 Encoders,然后下面是我根據官網的例子,寫的樣例:
可以看到,也是可以用的,但是相比較上面兩個是非常的麻煩的,所以推薦第一種和第二種,強推第二種,簡單。
說明:
以上代碼中我用的是SparkSession創建的,當然也可以用SQLContext來創建,但是SQLContext已經過時,不再推薦。
若是在用SQLContext時,遇到以上錯誤,同理解決。
總結
以上是生活随笔為你收集整理的解决升级Spark2.0之后,DataFrame map操作报错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark创建DataFrame的三种方
- 下一篇: TasksetManager冲突导致Sp