【发布时间】:2021-03-12 03:51:57
【问题描述】:
我的 Pyspark 数据框如下所示:
+--------+----------+----+----+----+
|latitude| longitude|var1|date|var2|
+--------+----------+----+----+----+
| 3.45| -8.65| 1| 7| 2|
| 30.45| 45.65| 1| 7| 2|
| 40.45| 123.65| 1| 7| 2|
| 43.45| 13.65| 1| 7| 2|
| 44.45| -12.65| 1| 7| 2|
| 54.45| -128.65| 1| 7| 2|
+--------+----------+----+----+----+
但我不知道如何重塑它以仅获取每个日期的寄存器和按该顺序指定 [变量、纬度、经度] 的多列,因此我可以在单独的列中处理变量、纬度和经度的每种组合.
制作这个:
df.select(
'date',
*[F.array(F.col(col), F.col('latitude'), F.col('longitude')) for col in var_cols]
).show()
我明白了:
+----+---------------------------------+---------------------------------+
|date|array(var1, latitude, longitude) |array(var2, latitude, longitude) |
+----+---------------------------------+---------------------------------+
| 7| [1.0, 3.45, -8.65]| [2.0, 3.45, -8.65]|
| 7| [1.0, 30.45, 45.65]| [2.0, 30.45, 45.65]|
| 7| [1.0, 40.45, 123.65]| [2.0, 40.45, 123.65]|
| 7| [1.0, 43.45, 13.65]| [2.0, 43.45, 13.65]|
| 7| [1.0, 44.45, -12.65]| [2.0, 44.45, -12.65]|
| 7| [1.0, 54.45, -128...| [2.0, 54.45, -128...|
+----+---------------------------------+---------------------------------+
我想要一个具有单个值(var 的值)的列和一个由纬度和经度的每个值组成的列。想象一下在 pandas 中创建一个 [日期、纬度、经度] 的索引,然后将纬度和经度列拆开。
例如,在熊猫中我会这样做:
df.set_index(["date", "latitude", "longitude"]).unstack().unstack()
【问题讨论】:
-
你想如何处理这两个变量? [var1, lat, long], [var2,lat,long] 还是 [var1, var2, lat, long]?
-
[var1, lat, long], [var2,lat,long] 方式@mck
-
所以你想要 3 列,日期,[v1,l,l],[v2,l,l]?
-
就是这样@mck。
标签: python apache-spark pyspark apache-spark-sql