pyspark 列出其他列对应的相关值

hc2pp10m  于 2023-04-29  发布在  Spark
关注(0)|答案(2)|浏览(112)

enter image description here
如您所见,我们必须获取与pyspark中values列中的item列相对应的相关值

oogrdqng

oogrdqng1#

根据上述数据。我创建了一个示例 Dataframe df

+----+-----+
|item|value|
+----+-----+
|   1|    9|
|   2|    8|
|   3|    7|
|   1|    2|
|   2|    1|
|   1|    3|
|   2|    2|
+----+-----+

我在我的环境中用group by和pivot函数用agg重现了同样的事情。我得到了这个输出。

验证码:

p_df1 = df.groupBy("item").pivot("item").agg(collect_list("value"))
p_df1.show()

按您的要求。使用select()方法从数据框中选择列1、2和3。

output1 = [list(row) for row in p_df1.select("1", "2", "3").collect()]
output1 = [[x for x in row if x] for row in output1]
print(output1)

输出:

ffscu2ro

ffscu2ro2#

您也可以尝试以下操作(使用内置的pyspark函数)-

from pyspark.sql.functions import *

data = [(1, 9), (2, 8), (3, 7), (1, 2), (2, 1), (1, 3), (2, 2)]
df = spark.createDataFrame(data, ["item", "value"])

df_agg = df.groupBy("item").agg(concat_ws(",", collect_list("value")).alias("values"))

pivot_df = df_agg.groupBy().pivot("item").agg(first("values"))
final_df = pivot_df.select(col("1"), col("2"), col("3"))

final_df.show()

+-----+-----+---+
|    1|    2|  3|
+-----+-----+---+
|9,2,3|8,1,2|  7|
+-----+-----+---+

相关问题