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