解決升級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時,遇到以上錯誤,同理解決。

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM