gpt4 book ai didi

apache-spark - 使用 group by 时在 Spark 中保留未使用的列?

转载 作者:行者123 更新时间:2023-12-04 05:22:54 24 4
gpt4 key购买 nike

所以我有一个用户名数据框,他们发布了哪些线程以及这些帖子的时间戳。如果弄清楚谁是线程的第一个用户以及时间,我想要做什么。我知道要弄清楚第一篇文章是在一个线程上做一个小组,然后在时间戳上做一个分钟。但这会删除用户名。我如何使用 group by 并保留用户名?

最佳答案

您可以使用 HiveContext 和 Hive named_struct 函数对一个 groupBy 执行此操作。诀窍是 min 将通过从左到右的顺序评估列来处理结构,并且只有在当前列相等时才移动到下一个。因此,在这种情况下,它实际上只是比较时间戳列,但是通过创建一个包含名称的结构,您将可以在 min 函数输出结果后访问该名称。

data = [
('user', 'thread', 'ts'),
('ryan', 1, 1234),
('bob', 1, 2345),
('bob', 2, 1234),
('john', 2, 2223)
]

header = data[0]
rdd = sc.parallelize(data[1:])
df = sqlContext.createDataFrame(rdd, header)
df.registerTempTable('table')

sql = """
SELECT thread, min(named_struct('ts', ts, 'user', user)) as earliest
FROM table
GROUP BY thread
"""

grouped = sqlContext.sql(sql)
final = grouped.selectExpr('thread', 'earliest.user as user', 'earliest.ts as timestamp')

关于apache-spark - 使用 group by 时在 Spark 中保留未使用的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com