pyspark:如何添加带有行号的列?

w7t8yxp5  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(703)

我有一个 pyspark Dataframe。我想添加一个包含行号的列。
这就是我要做的

stop_df = stop_df.withColumn("stop_id", monotonically_increasing_id())

如果我检查 stop_id ,我明白了

stop_df.agg(max("stop_id")).show()
+--------------+
|  max(stop_id)|
+--------------+
|32478542692458|
+--------------+

而行数是

stop_df.count()
Out[4]: 8134605
1tu0hz3e

1tu0hz3e1#

从spark单调递增的\u id文档:
生成单调递增的64位整数的列。
生成的id保证单调递增且唯一,但不是连续的。当前的实现将分区id放在高31位,将每个分区内的记录号放在低33位。假设Dataframe少于10亿个分区,每个分区少于80亿条记录。
使用窗口 row_number 函数获取行号。

df=spark.createDataFrame([("a",),("b",)],["id"])
from pyspark.sql.window import Window
from pyspark.sql.functions import *

# add partition by and order by clause if ordering required with in window.

w=Window.orderBy(lit(1))

df.withColumn("stop_id",row_number().over(w)).show()

# +---+-------+

# | id|stop_id|

# +---+-------+

# |  a|      1|

# |  b|      2|

# +---+-------+

df.withColumn("stop_id",row_number().over(w)).agg(max("stop_id")).show()

# +------------+

# |max(stop_id)|

# +------------+

# |           2|

# +------------+

df.count()

# 2

相关问题