【发布时间】:2021-01-02 20:13:18
【问题描述】:
我有一个大的 PySpark DataFrame,我想按照下面的示例进行操作。我认为形象化它比描述它更容易。因此,为了便于说明,让我们采用一个简单的 DataFrame df:
df.show()
+----------+-----------+-----------+
| series | timestamp | value |
+----------+-----------+-----------+
| ID1 | t1 | value1_1 |
| ID1 | t2 | value2_1 |
| ID1 | t3 | value3_1 |
| ID2 | t1 | value1_2 |
| ID2 | t2 | value2_2 |
| ID2 | t3 | value3_2 |
| ID3 | t1 | value1_3 |
| ID3 | t2 | value2_3 |
| ID3 | t3 | value3_3 |
+----------+-----------+-----------+
在上述DataFrame中,series列中包含的三个唯一值中的每一个(即ID1、ID2和ID3)都有相应的值(在values列下)同时发生(即timestamp 列中的相同条目)。
从这个 DataFrame 中,我想进行一个转换,最终得到以下 DataFrame,例如,命名为 results。可以看出,DataFrame的大小发生了变化,甚至列都根据原始DataFrame的条目进行了重命名。
result.show()
+-----------+-----------+-----------+-----------+
| timestamp | ID1 | ID2 | ID3 |
+-----------+-----------+-----------+-----------+
| t1 | value1_1 | value1_2 | value1_3 |
| t2 | value2_1 | value2_2 | value2_3 |
| t3 | value3_1 | value3_2 | value3_3 |
+-----------+-----------+-----------+-----------+
result 中的列顺序是任意的,不应影响最终答案。此说明性示例仅在 series 中包含三个唯一值(即 ID1、ID2 和 ID3)。理想情况下,我想编写一段代码,自动检测series 中的唯一值,从而生成一个新的对应列。有谁知道我可以从哪里开始?我尝试按timestamp 分组,然后使用聚合函数collect_set 收集一组不同的series 和value,但没有运气:(
提前非常感谢!
马里奥安萨斯
【问题讨论】:
标签: python dataframe apache-spark pyspark apache-spark-sql