【问题标题】:Having troubles joining 3 dataframes - pyspark加入 3 个数据框时遇到问题 - pyspark
【发布时间】:2018-02-12 01:25:07
【问题描述】:

我有三个数据框,加入它们时出现错误。以下是 3 个数据框:

名称:r_df 第 1 列:lab_key 第 2 列:帧

名称:f_df 第 1 列:lab_key 第 2 列:光学

名称:m_df 第 1 列:lab_key 第 2 列:水库

所有三个数据帧都有相同的 250 行,每个数据帧都有相同的 lab_keys。

我的代码如下所示:

newDF = r_df.join(f_df, r_df.lab_key == f_df.lab_key).join(m_df, r_df.lab_key == m_df.lab_key).select('r_df.frame', 'f_df.optic', 'm_df.res')

我收到一个错误:

Py4JJavaError:调用 o902.join 时出错。 : org.apache.spark.sql.AnalysisException: 引用 'lab_key' 不明确,可能是:lab_key#1648, lab_key#1954.;

对于可能出现的问题不是很有帮助。我正在尝试获取一个包含以下列的数据框:

第 1 列:lab_key
第 2 列:框架
第 3 列:光学
第四栏:水库

你能帮我加入这三个数据框吗?

【问题讨论】:

  • Python 中没有=== 运算符。我不相信您也正确使用了join。在我看来像 R。
  • 好吧,我的错。我删除了多余的=。现在我得到以下信息:Py4JJavaError:调用 o902.join 时发生错误。 :org.apache.spark.sql.AnalysisException:引用'lab_key'不明确,可能是:lab_key#1648,lab_key#1954.;

标签: python pyspark


【解决方案1】:

这是因为在第一次连接后创建的 pyspark 数据框有两列具有完全相同的列名。

r_df.join(f_df, ["lab_key"]).join(m_df, ["lab_key"])

如果您要加入的键相同,则无需专门从数据框中引用该列,只需将名称指定为数组即可。这将告诉 Pyspark 在最终数据框中只创建一个具有该名称的列

【讨论】:

  • 我知道有重复的列,但我不知道我怎么想不出语法。谢谢,这太棒了!我学到了一些新东西。
  • 哇,太棒了。内部连接后有两列总是让我恼火……为什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2022-01-26
  • 1970-01-01
  • 2018-09-05
  • 2017-11-19
  • 1970-01-01
相关资源
最近更新 更多