我有一个如下所示的客户支出历史记录表sold_df(实际表要大得多,下表显示了原始表的结构):
id month spent
A 1 5
B 3 15
C 1 12
A 2 99
C 3 35
B 1 10
C 2 20
该表是一个PySpark DataFrame。我想将其转换为其中的表:
1)每个客户的消费都对应一行; 2)每个月的支出对应一个栏。结构如下图所示:
id\month 1 2 3
A 5 99 null
B 10 null 15
C 12 20 35
由于表很大,因此我想使用PySpark库来实现此转换。我写的代码如下:
pent_final = spent_df.select("id").distinct()
for i in np.arange(1,4):
i_str = str(i)
spent_tmp = spent_df.select("id","month",col("spent").alias(i_str)).where(col("month")== i)
spent_final = spent_final.alias('a').join(spent_tmp.alias('b'), col('a.id') == col('b.id'),'left_outer').select(col('a.*), col('b.' + i_str))
我对Pyspark
很陌生。但是似乎代码可以完成任务。但是,我想知道有更好的方法吗?我可以没有循环吗?