Spark中文亂碼


本地讀取中文文本的亂碼問題,大概是存儲的環境編碼與運行程序的編碼不一致,比如windows是GBK編碼環境,IDEA設置為utf-8,那在編譯存儲過程中就可能發生錯誤(utf-8:一個漢字可能占用2或更多個字節;GBK,GB2312編碼一個漢字占用兩個字節),導致中文亂碼。

存儲字節的過程中是不會發生錯誤的,那么可以在轉化為字節與字符串的過程中設置好編碼方式,從而解決亂碼問題。

這個問題原理暫時不甚了解,暫留解決方法以待后續。

以下為讀取數據過程中以字節轉化為字符串的過程中設置 編碼方式為”GBK",來解決了亂碼問題

import org.apache.hadoop.io.{LongWritable, Text}
import org.apache.hadoop.mapred.TextInputFormat
import org.apache.spark.{SparkConf, SparkContext}

/*解決spark中文亂碼問題
    -----UTF-8改為GBK
* */
object Chinese {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setAppName("bus_analyze").setMaster("local[2]")
    val sc = new SparkContext(sparkConf)

    val rdd = sc.hadoopFile("C:/Users/huycid/Desktop/aa.txt", classOf[TextInputFormat],
      classOf[LongWritable], classOf[Text]).map(
      pair => new String(pair._2.getBytes, 0, pair._2.getLength, "GBK"))

    System.out.println("read data successfully")
    rdd.foreach(w=>println(w))

  }
}

 


免責聲明!

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



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