メインコンテンツまでスキップ

単調に増加するID

単調に増加する 64 ビット整数を生成します。生成された ID は単調に増加し、一意であることが保証されますが、連続的ではありません。現在の実装では、パーティション ID が上位 31 ビットに配置され、各パーティション内のレコード番号が下位 33 ビットに配置されます。データ フレームには 10 億未満のパーティションがあり、各パーティションには 80 億未満のレコードがあるという前提です。

構文

Python
from pyspark.sql import functions as sf

sf.monotonically_increasing_id()

戻り値

pyspark.sql.Column: グループの最後の値。

注意

この関数は、結果がパーティション ID に依存するため、非決定的です。

例として、それぞれ 3 つのレコードを持つ 2 つのパーティションを持つ :class: DataFrameを考えます。この式は次の ID を返します: 0, 1, 2, 8589934592 (1L << 33), 8589934593, 8589934594

例1 : 単調に増加するIDを生成する

Python
from pyspark.sql import functions as sf
spark.range(0, 10, 1, 2).select(
"*",
sf.spark_partition_id(),
sf.monotonically_increasing_id()).show()
Output
+---+--------------------+-----------------------------+
| id|SPARK_PARTITION_ID()|monotonically_increasing_id()|
+---+--------------------+-----------------------------+
| 0| 0| 0|
| 1| 0| 1|
| 2| 0| 2|
| 3| 0| 3|
| 4| 0| 4|
| 5| 1| 8589934592|
| 6| 1| 8589934593|
| 7| 1| 8589934594|
| 8| 1| 8589934595|
| 9| 1| 8589934596|
+---+--------------------+-----------------------------+