gpt4 book ai didi

group-by - Pyspark groupby 然后在组内排序

转载 作者:行者123 更新时间:2023-12-01 06:00:49 25 4
gpt4 key购买 nike

我有一个包含 id、offset、text 的表。假设输入:

id offset text
1 1 hello
1 7 world
2 1 foo

我想要这样的输出:
id text
1 hello world
2 foo

我正在使用:
df.groupby(id).agg(concat_ws("",collect_list(text))

但我不知道如何确保文本中的顺序。我做了 sort之前 groupby数据,但我听说 groupby可能会打乱数据。有没有办法做 sort组内后 groupby数据?

最佳答案

这将创建一个必需的 df:

df1 = sqlContext.createDataFrame([("1", "1","hello"), ("1", "7","world"), ("2", "1","foo")], ("id", "offset" ,"text" ))
display(df1)
那么您可以使用以下代码,可以进一步优化:
@udf
def sort_by_offset(col):
result =""
text_list = col.split("-")
for i in range(len(text_list)):
text_list[i] = text_list[i].split(" ")
text_list[i][0]=int(text_list[i][0])
text_list = sorted(text_list, key=lambda x: x[0], reverse=False)
for i in range(len(text_list)):
result = result+ " " +text_list[i][1]
return result.lstrip()
df2 = df1.withColumn("offset_text",concat(col("offset"),lit(" "),col("text")))
df3 = df2.groupby(col("id")).agg(concat_ws("-",collect_list(col("offset_text"))).alias("offset_text"))
df4 = df3.withColumn("text",sort_by_offset(col("offset_text")))
display(df4)
最终输出:
Final Output

关于group-by - Pyspark groupby 然后在组内排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45716436/

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