我有以下数据框:如何添加运行标识新列星火数据帧(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开始。这种方法有其优点和缺点。根据你的用例使用它。 –