enter image description here如您所见,我们必须获取与pyspark中values列中的item列相对应的相关值
oogrdqng1#
根据上述数据。我创建了一个示例 Dataframe df。
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。
select()
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)
输出:
ffscu2ro2#
您也可以尝试以下操作(使用内置的pyspark函数)-
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| +-----+-----+---+
2条答案
按热度按时间oogrdqng1#
根据上述数据。我创建了一个示例 Dataframe
df
。我在我的环境中用group by和pivot函数用agg重现了同样的事情。我得到了这个输出。
验证码:
按您的要求。使用
select()
方法从数据框中选择列1、2和3。输出:
ffscu2ro2#
您也可以尝试以下操作(使用内置的
pyspark
函数)-