【问题标题】:Cannot resolve 'column_name' given input columns: SparkSQL无法解析给定输入列的“列名”:Spark SQL
【发布时间】:2021-01-10 09:51:19
【问题描述】:

我这里有一段简单的代码:

query = """
    select id, date, type from schema.camps
"""
df = spark.sql(query)

我收到一条错误消息:

>     > "cannot resolve '`id`' given input columns:
>     > [ecs_snapshot, ecs_version, ecs_bundle_type]; line 2   

文件 >> “/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/session.py”,行 >> 767,在 sql 中 >> 返回 DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped) 文件 >> "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", >> 第 1257 行,在 调用 >> 答案,self.gateway_client,self.target_id,self.name)文件“/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py”, > 第 69 行, > > 在装饰 >> 引发 AnalysisException(s.split(': ', 1)[1], stackTrace) pyspark.sql.utils.AnalysisException: "无法解析 >> 'id' 给定输入列:[ecs_snapshot, >> ecs_version, ecs_bundle_type];第 2 行第 11 行;"

根据提供的解决方案尽我所能。有趣的是,我在另一个工作正常的表上有另一个查询。对此有任何帮助将不胜感激。提前致谢。

这是表的架构:

camps(
    
    id numeric(38,0) NOT NULL encode raw,
    name varchar(765) NULL encode zstd,
    type varchar(765) NULL encode zstd,
    YYYY varchar(765) NULL encode zstd,
    ZZZZ varchar(765) NULL encode zstd,
    LLLL varchar(765) NULL encode zstd,
    MMMM numeric(38,0) NULL encode zstd,
    NNNN  varchar(765) NULL encode zstd,
    date timestamp without time zone NULL encode zstd,
    PPPP numeric(38,0) NULL encode az64,
    PRIMARY KEY (marketplace_id, campaign_id)
)

;

【问题讨论】:

  • ads.dim_campaigns - 你可以显示描述吗?
  • @mvasyliv 在此处添加了架构
  • 对不起。带有数据库广告的表 dim_campaigns 的架构?

标签: python-3.x pyspark apache-spark-sql


【解决方案1】:

camp.campaign_id 列在表ads.dim_campaigns 中不存在

这个查询有效

>>> l = [[1],[2],[3]]
>>> df = spark.createDataFrame(l,['col_1'])
>>> df.createOrReplaceTempView('table')
>>> query = """SELECT table_alias.col_1 FROM table table_alias"""
>>> spark.sql(query).show()
+-----+
|col_1|
+-----+
|    1|
|    2|
|    3|
+-----+

此查询给出的错误与您的相同(请参阅 col_x 而不是 col_1

>>> l = [[1],[2],[3]]
>>> df = spark.createDataFrame(l,['col_1'])
>>> df.createOrReplaceTempView('table')
>>> query = """SELECT table_alias.col_x FROM table table_alias"""
>>> spark.sql(query).show()

/.../
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/session.py", line 767, in sql
    return DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped)
  File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
  File "/usr/local/Cellar/apache-spark/2.4.5/libexec/python/pyspark/sql/utils.py", line 69, in deco
    raise AnalysisException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.AnalysisException: "cannot resolve '`table_alias.col_x`' given input columns: [table_alias.col_1];

【讨论】:

  • 确实存在。请检查我添加的上述架构
  • 这很有趣!表 ads.dim_campaigns 是否与 dim_campaigns 相同?我可以看到,在您查询的表中,您只有这样的列 camp.ecs_snapshot、camp.ecs_version、camp.ecs_bundle_type 。你能告诉你从这个查询中看到什么输出:spark.sql("SELECT * FROM ads.dim_campaigns").printSchema()
  • @DigvijaySawant 我很高兴我们发现了问题。一旦你知道它为什么会发生,你会介意分享知识吗?也许在某个时候我也会有这样的问题......
【解决方案2】:

请尝试运行代码并显示结果。

import spark.implicits._

val df1 = spark.table("ads.dim_campaigns")
df1.printSchema()
// Please, show result

val df2 = df1.select(
  'campaign_id,
  'external_id,
  'start_date,
  'program_type,
  'advertiser_id
)
df2.printSchema()
// please, show result

【讨论】:

  • 是的,请检查。如果你需要帮助,请去。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多