大数据环境基本都是utf-8编码,如果数据文件非utf-8编码,Spark读取时会乱码,经验项目验证,通过sc.hadoopFile接口比较可靠,该接口返回的数据每行表示为<行偏移,行内容Text>,然后通过map方法,重新构造String,这样获得的String不会乱码,具体实现方式如下代码:
//数据文件编码
String encdoing = "gbk";
//数据文件路径
String filePath = "/user/test/testfile"
SparkSession session = SparkSession.builder().getOrCreate();
JavaSparkContext sc = JavaSparkContext.fromSparkContext(session.sparkContext());
JavaRDD<String> basRDD = sc.hadoopFile(filePath, TextInputFormat.class,LongWritable.class,Text.class).map(p -> {
return new String(p._2.getBytes(),0,p._2.getLength(),encoding);
})