SparkSQL运行抛出无法解析id字段的AnalysisException异常如何解决
问题原因
- 你的代码中读取CSV时设置了
.option("header", "true"),但fakefriends.csv文件本身没有表头行,Spark将第一行的业务数据(0,33,385,Will)识别为了列名,导致DataFrame的列名变成了0、33、385、Will,与你定义的Person类的字段id、name、age、friends完全不匹配,转换为Dataset[Person]时就会抛出找不到id列的异常。
解决方法
方案1:关闭表头读取,手动映射列名(推荐,无需修改源文件)
修改读取CSV的代码段,关闭header选项,读取后手动给列命名再转为Person类型的Dataset:
val schemaPeople = spark.read .option("header", "false") // 关闭表头识别,因为源文件没有表头 .option("inferSchema", "true") .csv("C:/fakefriends.csv") .toDF("id", "name", "age", "friends") // 手动指定列名和Person类字段对应 .as[Person]
方案2:给CSV文件添加表头
打开fakefriends.csv,在第一行添加表头内容id,name,age,friends,原有代码无需修改即可正常运行。
内容的提问来源于stack exchange,提问作者Ashutosh Kumar
相关产品推荐
相关产品推荐

