中文编码错乱如图:
解决方法:读取文本文件时,以spark.sparkContext.hadoopFile方法,对字符串的编码进行转换
import org.apache.hadoop.io.{LongWritable, Text}
import org.apache.hadoop.mapred.TextInputFormat
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}
object spark_first{
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("spark sql basic example")
.master("local")
.config("spark.some.config.option","some-value")
.getOrCreate()
val input="C:\\Users\\J0031\\Documents\\aa.csv"
val abc: RDD[Array[String]] = spark.sparkContext.hadoopFile(input, classOf[TextInputFormat],
classOf[LongWritable], classOf[Text]).map(
pair => new String(pair._2.getBytes, 0, pair._2.getLength, "GBK")).map(x => x.split(","))
val abcrdd: RDD[Company] = abc.map(x => Company(x(0).toInt, x(1), x(2), x(3), x(4), x(5).toInt, x(6).toInt))
val data: DataFrame = spark.createDataFrame(abcrdd)
// val cdf: Array[Company] = abcrdd.collect()
// cdf.foreach(x=>print(x))
data.show()
spark.stop()
}
}
case class Company(id:Int,name:String,xingming:String,area:String,bianhao:String,num:Int,shuzi:Int)