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