SparkテキストまたはCSVファイルの中国語文字化けしの解決策
1624 ワード
Sparkのデフォルトメソッドを使用して、spark.read.option("header","true").csv(path)CSVファイルまたはsparkを読み出す.read.textFile(path)はテキストファイルを読み出し、この2つの方法はデフォルトでUTF-8符号化であるため、ソースデータにGBKまたはGB 2312の符号化があるとSparkがテキストを読み出す中国語の文字化けしが発生する.
CSVファイルを読み込んだ場合は、以下のように使用できますが、以下はGBKを例にとり、実際に置き換えることができます
テキストファイルを読み込んだ場合は、次の方法で解決できます.
CSVファイルを読み込んだ場合は、以下のように使用できますが、以下はGBKを例にとり、実際に置き換えることができます
def readCSV(spark:SparkSession,headerSchema:String,mySchema: ArrayBuffer[String],code:String,file:String) ={
val rddArr:RDD[Array[String]] = spark.sparkContext.hadoopFile(file, classOf[TextInputFormat],
classOf[LongWritable], classOf[Text]).map(
pair => new String(pair._2.getBytes, 0, pair._2.getLength, code))
//
.map(_.trim.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)",-1))
val fieldArr = rddArr.first()
//Row.fromSeq(_) map(Row(_)), spark.createDataFrame(rddRow,schema)
val rddRow = rddArr.filter(!_.reduce(_+_).equals(fieldArr.reduce(_+_))).map(Row.fromSeq(_))
val schemaList = ArrayBuffer[StructField]()
if("TRUE".equals(headerSchema)){
for(i
SparkがCSVファイルの中国語の文字化けしを読み取る完全な例を解決します
テキストファイルを読み込んだ場合は、次の方法で解決できます.
import org.apache.hadoop.io.{LongWritable, Text}
import org.apache.hadoop.mapred.TextInputFormat
val path = "E:\
ewcode\\MyFirstProject\\data\\stockearn"
val inputRdd = spark.sparkContext.hadoopFile(path, classOf[TextInputFormat],
classOf[LongWritable], classOf[Text]).map(
pair => new String(pair._2.getBytes, 0, pair._2.getLength, "GBK"))