spark读取文件时对字符编码的支持

Posted benfly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark读取文件时对字符编码的支持相关的知识,希望对你有一定的参考价值。

在spark中常使用textFile读取文件,默认的是UTF-8编码,但在实际读取文件时,存在不同的文件编码,如果不是UTF-8编码的文件,便不能直接使用这个方法读文件。

 

以下是2种读取不同编码文件的方法,下面以ANSI的中文简体编码为例,codepage是1252.

 

方法1:使用decode方法

val spark = SparkSession.builder().config(sparkConf).getOrCreate()
import spark.implicits._

val encoding = "cp1252" val df = spark.read.format("text").load(files).select(decode(col("value"), encoding).as("value")) val rdd1 = df.rdd.map(row => row.get(0).toString).map(_.split("\|"))

 

方法2:使用hadoopFile方法读文件,并对每一个(k,v) 元组,使用指定编码读取字节并转换为字符串

val spark = SparkSession.builder().config(sparkConf).getOrCreate()
import spark.implicits._

val encoding = "cp1252" val rdd1 = spark.sparkContext.hadoopFile(files, classOf[TextInputFormat], classOf[LongWritable], classOf[Text]).map { case (_, t) => new String(t.getBytes, 0, t.getLength, encoding) }.map(_.split("\|"))

 

以上是关于spark读取文件时对字符编码的支持的主要内容,如果未能解决你的问题,请参考以下文章

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

KafkaConsumer 在 spark 中创建和删除 globalTempView 时对多线程访问不安全

Spark s3 csv文件读取顺序

Spark Scala 读取GBK文件的方法

学生成绩管理系统--文件存储

08 转换流