Spark Pivot 行到带日期的列

Spark Pivot rows to Columns with date

我有一个如下所示的数据框

id  category    category_value  load_timestamp
            
1   Apple           Y            59:52.1
2   Apple           Y            33:18.0
3   Apple           N            08:13.4
4   Apple           Y            22:15.4
5   Tesla           Y            43:31.3
5   Nvidia          N            23:24.2

我能够将其旋转到下方:

id  Apple   Tesla   Nvidia
1   Y       
2   Y       
3   N       
4   Y       
5            Y       N

我能够使用以下代码完成此操作:

pivot_df = df.groupBy("id").pivot("category",[Apple, Tesla, Nvidia]).agg(first("category_value"))

但是,我需要获取以下格式的原始数据框:

id  Apple   Apple_load_timestamp    Tesla   Tesla_load_timestamp    Nvidia  Nvidia_load_timestamp
1   Y       59:52.1             
2   Y       33:18.0             
3   N       08:13.4             
4   Y       22:15.4             
5                                       Y   43:31.3                    N    23:24.2

在 Spark/PySpark 中旋转数据框的最佳方法是什么,其中还包括每行的时间戳列?

您可以使用:

out = df.groupBy("id").pivot("category").agg(F.first("category_value"),
                                 F.first("load_timestamp")).na.fill('')
import re
cols = [re.sub("\(category.*","",i.replace("_first",'')) for i in out.columns]
d = zip(out.columns,cols)
out.select(*[F.col(a).alias(b) for a,b in d]).show()

+---+-----+---------------------+------+----------------------+-----+---------------------+
| id|Apple|Apple(load_timestamp)|Nvidia|Nvidia(load_timestamp)|Tesla|Tesla(load_timestamp)|
+---+-----+---------------------+------+----------------------+-----+---------------------+
|  1|    Y|              59:52.1|      |                      |     |                     |
|  2|    Y|              33:18.0|      |                      |     |                     |
|  3|    N|              08:13.4|      |                      |     |                     |
|  4|    Y|              22:15.4|      |                      |     |                     |
|  5|     |                     |     N|               23:24.2|    Y|              43:31.3|
+---+-----+---------------------+------+----------------------+-----+---------------------+