本地讀取中文文本的亂碼問題,大概是存儲的環境編碼與運行程序的編碼不一致,比如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)) } }