描述错误
将查询 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")