我正在尝试使用数据集在scala中读取CSV文件。之后我正在进行一些操作。但是我的代码抛出了错误。 以下是我的代码:
final case class AadharData(date:String,
registrar:String,
agency:String,
state:String,
district:String,
subDistrict:String,
pinCode:Int,
gender:String,
age:Int,
aadharGenerated:Int,
rejected:Int,
mobileNo:Double,
email:String)
val spark = SparkSession.builder().appName("GDP").master("local").getOrCreate()
import spark.implicits._
val a = spark.read.option("header", false).csv("D:\\BGH\\Spark\\aadhaar_data.csv").as[AadharData]
val b = a.map(rec=>{
(rec.registrar,1)
}).groupByKey(f=>f._1).collect()
我收到了以下错误:
Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve '`date`' given input columns: [_c0, _c2, _c1, _c3, _c5, _c8, _c9, _c7, _c6, _c11, _c12, _c10, _c4];
感谢任何帮助: 提前谢谢。
答案 0 :(得分:1)
线程中的异常" main" org.apache.spark.sql.AnalysisException:无法解析'
date
'给定输入列:[_ c0,_c2,_c1,_c3,_c5,_c8,_c9,_c7,_c6,_c11,_c12,_c10,_ c4];
上面的错误是因为您使用了header选项作为false (.option("header", false)
)所以 spark会将列名称生成为_c0,_c1等等。但虽然使用案例类对生成的数据帧进行类型转换,但您使用的列名称与已生成的列名称不同。 因此发生上述错误。
解决方案
你应该告诉spark sql生成案例类中使用的名称,并且告诉它输入inferchema
val columnNames = classOf[AadharData].getDeclaredFields.map(x => x.getName)
val a = sqlContext.read.option("header", false).option("inferSchema", true)
.csv("D:\\BGH\\Spark\\aadhaar_data.csv").toDF(columnNames:_*).as[AadharData]
上述错误应该消失