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

Posted

技术标签:

【中文标题】AnalysisException:无法解析给定的输入列:【英文标题】:AnalysisException: cannot resolve given input columns: 【发布时间】:2020-09-23 19:01:03 【问题描述】:

当我尝试从临时表中选择几列时遇到此错误。

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”,

我们将不胜感激。

谢谢

【问题讨论】:

你能试试‘cars_tmp.abc.location_id’吗?即用反引号来逃避名称。您也可以尝试 print(data.columns) 来获取名称。 【参考方案1】:

表中不存在列名。 select * from cars_tmp 有效,因为您没有指定列名。

请使用相同的错误处理查看此答案https://***.com/a/64042756/8913402。

【讨论】:

【参考方案2】:

我通过在熊猫选择查询中添加每一列解决了这个问题。所以是这样的:

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

【讨论】:

以上是关于AnalysisException:无法解析给定的输入列:的主要内容,如果未能解决你的问题,请参考以下文章

org.apache.spark.sql.AnalysisException:无法解析给定的输入列

PYSPARK org.apache.spark.sql.AnalysisException:无法解析给定输入列的“INPUT__FILE__NAME”

org.apache.spark.sql.AnalysisException:给定pyspark中的输入列,无法解析'sub_tot`'

PySpark AnalysisException:无法解析列名

AnalysisException,pyspark 无法解析数据框查询中的变量

org.apache.spark.sql.AnalysisException:无法解析“S.SID”