【问题标题】:AnalysisException: cannot resolve given input columns:AnalysisException:无法解析给定的输入列:
【发布时间】: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) 来获取名称。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多