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|
+---+-----+---------------------+------+----------------------+-----+---------------------+
我有一个如下所示的数据框
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|
+---+-----+---------------------+------+----------------------+-----+---------------------+