我有以下數據框:如何添加運行標識新列星火數據幀(pyspark)
timestamp \t sum
31/01/2017 09:00 \t 0
31/01/2017 10:00 \t 0
31/01/2017 11:00 \t 0
31/01/2017 12:00 \t 2
31/01/2017 13:00 \t 2
31/01/2017 14:00 \t 2
31/01/2017 15:00 \t 11
,並想添加一個新的ID列 - 只是一個流水號像即:
+----------------+---+---------+
| timestamp|sum|running_id|
+----------------+---+---------+
|2017-01-31 09:00| 0| 0|
|2017-01-31 10:00| 0| 1|
|2017-01-31 11:00| 0| 2|
|2017-01-31 12:00| 2| 3|
|2017-01-31 13:00| 2| 4|
|2017-01-31 14:00| 2| 5|
|2017-01-31 15:00| 11| 6|
我做了這樣的:
sub_data_spark = sub_data_spark.rdd.zipWithIndex().map(lambda x: (x[0][0],x[0][1],x[1])).toDF(sub_data_spark.columns+["running_id"])
有些人可以爲一個 「乾淨」 的方式諮詢?
感謝, 鮑里斯
如果沒有添加PartitionBy子句,這將基本上將所有數據混洗到單個分區,這不會對並行性有好處。 –
謝謝,這個工程。如何使用PartitionBy並保持時間戳的有序性(行的順序應該保持不變) – Boris
從表中選擇*,row_Number()over(按TO_DATE分區(timestamp)順序)。這會將不同日期的所有數據發送到不同的分區。但是對於所有分區計數將從1開始。這種方法有其優點和缺點。根據你的用例使用它。 –