apache-spark - 我如何制作一个关于组的列对?
问题描述
我有一个数据框和一个id
列作为一个组。对于每个id
我想通过以下方式配对它的元素:
title id
sal 1
summer 1
fada 1
row 2
winter 2
gole 2
jack 3
noway 3
输出
title id pair
sal 1 None
summer 1 summer,sal
fada 1 fada,summer
row 2 None
winter 2 winter, row
gole 2 gole,winter
jack 3 None
noway 3 noway,jack
正如您在输出中看到的那样,我们从 group 的最后一个元素id
与它上方的一个元素配对。由于该组的第一个元素没有我放的对None
。我还应该提到,这可以pandas
通过以下代码完成,但我需要Pyspark
代码,因为我的数据很大。
df=data.assign(pair=data.groupby('id')['title'].apply(lambda x: x.str.cat(x.shift(1),sep=',')))
|
解决方案
我不能再强调 Spark 数据框是一个无序的行集合,所以说“它上面的元素”之类的东西是未定义的,没有要排序的列。您可以使用 伪造订单F.monotonically_increasing_id()
,但我不确定这是否是您想要的。
from pyspark.sql import functions as F, Window
w = Window.partitionBy('id').orderBy(F.monotonically_increasing_id())
df2 = df.withColumn(
'pair',
F.when(
F.lag('title').over(w).isNotNull(),
F.concat_ws(',', 'title', F.lag('title').over(w))
)
)
df2.show()
+------+---+-----------+
| title| id| pair|
+------+---+-----------+
| sal| 1| null|
|summer| 1| summer,sal|
| fada| 1|fada,summer|
| jack| 3| null|
| noway| 3| noway,jack|
| row| 2| null|
|winter| 2| winter,row|
| gole| 2|gole,winter|
+------+---+-----------+
推荐阅读
- javascript - 如何在 jquery 数据表上重新关注此警报 1 消息
- next.js - Next.js - 如何在 404 页面上隐藏导航和页脚组件?
- javascript - 为什么 $.ajax 在找不到请求的相对 url 时重复加载 [base url + index.html]
- python - groupby 并使用 pandas 将行转换为列表
- python - Pywin32 不保存 Outlook 中的附件(Restrict.Attachements)
- eclipse - 使用 Eclipse paho 客户端将主题发布到 MQTT
- amazon-web-services - 发布到 SNS 主题/SQS 订阅的延迟?
- android - 插页式广告和再创作活动
- salt-stack - 如何在 Saltstack orch 状态下成功返回任何或两个小兵?
- driver - 2 笔记本上的 GPU。NVIDIA-SMI 失败,因为它无法与 NVIDIA 驱动程序通信