pyspark.sql.utils.AnalysisException: Column "" not found in schema Some(StructType(StructField

描述错误

将查询 hive 的结果,保存到 MySQL 中,代码如下:

df = spark.sql("select gender,count(1) as `count`,'weibo' ,substr(current_timestamp(),1,19) as `create_time` from dwd_yuqing.t_weibo group by gender")

df.show()
df.printSchema()
# 将 查询结果保存到 MySQL数据库中
prop = {"user": "root","password": "root","driver": "com.mysql.jdbc.Driver"}
df.write.jdbc("jdbc:mysql://hadoop1:3306/yuqing_dws?useSSL=false", "t_gender_statistics","append", prop)

报错如下:

pyspark.sql.utils.AnalysisException: Column "weibo" not found in schema Some(StructType(StructField(id,IntegerType,false), StructField(gender,StringType,true), StructField(count,IntegerType,true), StructField(oragin,StringType,true), StructField(create_time,StringType,true)));

分析

使用 append 模式,mysql中的表已经存在,将查询结果保存到mysql中,要求查询结果 的 列名,与 mysql 表中的 列名 必须一致。否则就会报这个错误

解决

将查询结果加上 别名,该别名与 对应的 mysql 字段同名

如下:

df = spark.sql("select gender,count(1) as `count`,'weibo' as oragin,substr(current_timestamp(),1,19) as `create_time` from dwd_yuqing.t_weibo group by gender")

原文出处:/show_1IX3H3xnv0b7.html