本地读取中文文本的乱码问题,大概是存储的环境编码与运行程序的编码不一致,比如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)) } }