scala语言spark读取csv中文乱码

在使用Scala和Spark处理CSV文件时遇到了中文乱码问题,表现为文本显示异常。为了解决这个问题,可以尝试使用`spark.sparkContext.hadoopFile`方法,并在读取时指定正确的字符编码进行转换,从而正确地解析中文内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中文编码错乱如图:
在这里插入图片描述

解决方法:读取文本文件时,以spark.sparkContext.hadoopFile方法,对字符串的编码进行转换


import org.apache.hadoop.io.{LongWritable, Text}
import org.apache.hadoop.mapred.TextInputFormat
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}


object spark_first{
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("spark sql basic example")
      .master("local")
      .config("spark.some.config.option","some-value")
      .getOrCreate()


    val input="C:\\Users\\J0031\\Documents\\aa.csv"

    val abc: RDD[Array[String]] = spark.sparkContext.hadoopFile(input, classOf[TextInputFormat],
      classOf[LongWritable], classOf[Text]).map(
      pair => new String(pair._2.getBytes, 0, pair._2.getLength, "GBK")).map(x => x.split(","))

    val abcrdd: RDD[Company] = abc.map(x => Company(x(0).toInt, x(1), x(2), x(3), x(4), x(5).toInt, x(6).toInt))

    val data: DataFrame = spark.createDataFrame(abcrdd)

   // val cdf: Array[Company] = abcrdd.collect()
   // cdf.foreach(x=>print(x))
    data.show()


    spark.stop()
  }

}

case class Company(id:Int,name:String,xingming:String,area:String,bianhao:String,num:Int,shuzi:Int)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值