【问题标题】:Found duplicate column when trying to query with Spark SQL尝试使用 Spark SQL 查询时发现重复列
【发布时间】:2019-04-10 12:40:00
【问题描述】:

我想像这样对数据框进行过滤:

filtered_df2 = filtered_df.select("li", "result.li", "fw").orderBy("fw")

但是,嵌套列result.lili 具有相同的名称,这会带来问题。我收到以下错误:

AnalysisException: 'Found duplicate column(s) when inserting into hdfs://...: `li`;'

如何成功过滤这两个字段?

【问题讨论】:

  • filter 是什么意思?您对最终结果有何期望?一栏,还是两栏?
  • 能否请加filtered_df.printSchema()
  • 对不起,我想我说错了。我想要的是在显示结果时分别显示所有 3 列。我之前只过滤了 DF 一行,但这不是问题
  • 我现在有了解决方案。我需要使用的是 col().alias("something_else")。

标签: python apache-spark dataframe pyspark apache-spark-sql


【解决方案1】:

我现在找到了解决方案。我需要使用的是:

在文件头添加from pyspark.sql.functions import *

像这样简单地使用 col() 的别名函数:

filtered_df2 = filtered_df.select(col("li"),col("result.li").alias("result_li"), col("fw")).orderBy("fw")

【讨论】:

  • 不要做import *——如果你这样做了,你会发现summaxmin等都被spark函数取代了。
  • 请将此标记为已回答,也可以使用“result.li”作为“result_li”作为参考
  • 我尝试了“AS”,但没有成功。我会在两天内尽可能标记为已回答
  • @pault 说了什么。我喜欢将我的导入语句结构设置为from pyspark.sql import functions as F ,并用它来引用所有包含的函数。例如:F.col("result.li")
【解决方案2】:

您可以使用selectExpr 并使用AS 给列别名。

filtered_df2 = filtered_df\
    .selectExpr("li AS li", "result.li AS result_li", "fw AS  fw")\
    .orderBy("fw")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多