代码:
from pyspark.sql import SQLContext,HiveContext,SparkSession,Row
from pyspark.sql.types import Row,StringType,StructField,StringType,IntegerType
from pyspark.sql.dataframe import DataFrame
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.some.config.option”,”some-value") \
.getOrCreate()
hive_context= HiveContext(spark)
# 生成查询的SQL语句,这个跟hive的查询语句一样,所以也可以加where等条件语句
one_day_ago = "20220429"
hive_read = "select * from temp_exp20220620_gmm_{}".format(one_day_ago)
# 通过SQL语句在hive中查询的数据直接是dataframe的形式
read_df = hive_context.sql(hive_read)
read_df.printSchema() # 这句没有问题,有正常输出
read_df.select("f476").show() #这句报错
一般来说这种错误的产生是因为在创建SparkSession对象的时候HiveContext没有被启用。
解决方法
创建SparkSession对象记得启用HiveContext, 即 使用enableHiveSupport()
, 如下:
from pyspark.sql import SQLContext,HiveContext,SparkSession,Row
from pyspark.sql.types import Row,StringType,StructField,StringType,IntegerType
from pyspark.sql.dataframe import DataFrame
spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.some.config.option”,”some-value") \
.enableHiveSupport() \
.getOrCreate()
解决方案来自:java.lang.AssertionError: assertion failed: No plan for HiveTableRelation的解决方法_Lestat.Z.的博客-CSDN博客