AnalysisException:无法解析给定的输入列:

时间:2020-09-23 19:01:03

标签: pyspark apache-spark-sql azure-databricks

当我尝试从临时表中选择几列时,我遇到了这个错误。

pd_df = pd.read_sql('select * from abc.cars limit 10', conn)

df = spark.createDataFrame(pd_df)
df.createOrReplaceTempView("cars_tmp")
df.show()

print('***************')
print("Reading from tmp table")
data = spark.sql('select location_id from cars_tmp')
data.show()


AnalysisException: cannot resolve '`location_id`' given input columns: [cars_tmp.abc.product_id, cars_tmp.abc.location_id ...]

当我选择所有列时,我得到结果。这样就成功了:

data = spark.sql('select * from cars_tmp')
data.show()

我尝试了以下查询,但它们也因相同的错误而失败:

data = spark.sql('select cars_tmp.abc.location_id from cars_tmp')
data.show()

data = spark.sql('select cars_tmp.location_id from cars_tmp')
data.show()

data = spark.sql('select abc.location_id from cars_tmp')
data.show()

我在datbricks中运行这些。 Databricks运行时版本:7.0 Apache Spark版本:3.0 标量:2.12

或“ spark_version”:“ 7.0.x-scala2.12”,

我们将不胜感激任何帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

表中不存在列名。 select * from cars_tmp之所以有效,是因为您未指定列名。

请以相同的错误处理方式查看此答案https://stackoverflow.com/a/64042756/8913402

答案 1 :(得分:0)

我通过在熊猫选择查询中添加每一列来解决了该问题。像这样:

true