在 PySpark 中加入多个列

Posted

技术标签:

【中文标题】在 PySpark 中加入多个列【英文标题】:Joining multiple columns in PySpark 【发布时间】:2015-08-24 23:49:30 【问题描述】:

我想加入两个具有共同列名的 DataFrame。

我的DataFrames如下:

>>> sample3
DataFrame[uid1: string, count1: bigint]
>>> sample4
DataFrame[uid1: string, count1: bigint]


sample3
     uid1  count1
0  John         3
1  Paul         4
2  George       5

sample4
     uid1  count1
0  John         3
1  Paul         4
2  George       5

(我故意使用不同名称的同一个 DataFrame)

我查看了JIRA issue 7197 for Spark,他们解决了如何执行此连接(这与 PySpark 文档不一致)。但是,他们提出的方法会产生重复的列:

>>> cond = (sample3.uid1 == sample4.uid1) & (sample3.count1 == sample4.count1)
>>> sample3.join(sample4, cond)
DataFrame[uid1: string, count1: bigint, uid1: string, count1: bigint]

我想得到一个键不出现两次的结果。

我可以用一栏做到这一点:

>>>sample3.join(sample4, 'uid1')
DataFrame[uid1: string, count1: bigint, count1: bigint]

但是,相同的语法不适用于这种加入方法并引发错误。

我想得到结果:

DataFrame[uid1: string, count1: bigint]

我想知道这怎么可能

【问题讨论】:

您的值是要求和的整数吗? count1_sum = sample3_spark['count1'] + sample4_spark['count1']? 不,我想弄清楚如何执行连接。这不是达到最终目标的中间步骤 看起来可能是addressed in April。您可以在 python/pyspark/sql/dataframe.py 的第 471 行使用一些示例语法。 是的,但是文档不正确。 它在文件的第 560 行,但这样做会产生错误。 【参考方案1】:

您可以根据您的情况使用键列表定义连接条件:

sample3.join(sample4, ['uid1','count1'])

【讨论】:

以上是关于在 PySpark 中加入多个列的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 pyspark 中加入两个临时视图后删除列不起作用,但它适用于数据框连接?

如何在pyspark中加入具有多个重叠的两个数据框

在pyspark中加入2个表,多个条件,左连接?

在pyspark中加入具有相同列名的数据框

如何在 pyspark 中加入带有熊猫数据框的配置单元表?

将列表转换为数据框,然后在 pyspark 中加入不同的数据框