1. 在生產環境下,很多文件是GBK編碼格式的,而SPARK 常用的textFile方法默認是寫死了讀UTF-8格式的文件,其他格式文件會顯示亂碼
用如下代碼實現讀取GBK文件的方法
import org.apache.hadoop.io.{LongWritable, Text}
import org.apache.hadoop.mapred.TextInputFormat
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object GBKtoUtf8 {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setMaster("local").setAppName("spark sql test")
val sc = new SparkContext(sparkConf)
//textFile 默認只支持Utf-8格式,這種方法都到的是亂碼
//這里用的是文件夾路徑,也可以指定到具體文件
sc.textFile("/Users/hduser/Downloads/gbk").foreach(println)
//通過封裝后的方法讀取GBK文件,並講每一行數據以字符串格式返回(RDD[String])
transfer(sc,"/Users/hduser/Downloads/gbk").foreach(println)
}
def transfer(sc:SparkContext,path:String):RDD[String]={
sc.hadoopFile(path,classOf[TextInputFormat],classOf[LongWritable],classOf[Text],1)
.map(p => new String(p._2.getBytes, 0, p._2.getLength, "GBK"))
}
}
2. 構建測試文件
如果你用的是Mac OS,可以按照我如下步驟操作(http://www.cnblogs.com/bonnienote/p/6139545.html),打開Bash
cd /Users/hduser/Downloads/gbk
echo "Bonnie 大數據|學姐筆記 果果學姐" > test_utf8.txt
轉換命令
iconv -f UTF-8 -t GBK test_utf8.txt > test_gbk.txt
在IDEA運行上述程序,結果如下
Bonnie ����ݣ�ѧ��ʼ� ���ѧ��
Bonnie 大數據|學姐筆記 果果學姐
可以看到第一次調用textFile時,顯示文件為亂碼
而第二次調用GBK文件的讀取方法是,顯示文件正常