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("\\|"))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM