monotonically_increasing_id
Génère des entiers de 64 bits strictement croissants. L'ID généré est garanti d'être strictement croissant et unique, mais pas consécutif. L'implémentation actuelle place l'ID de partition dans les 31 bits supérieurs et le numéro d'enregistrement au sein de chaque partition dans les 33 bits inférieurs. L'hypothèse est que le data frame compte moins de 1 milliard de partitions et que chaque partition compte moins de 8 milliards d'enregistrements.
Syntaxe
from pyspark.sql import functions as sf
sf.monotonically_increasing_id()
Renvoie
pyspark.sql.Column: dernière valeur du groupe.
Notes
La fonction est non déterministe car son résultat dépend des ID de partition.
À titre d'exemple, considérons une :class:DataFrame avec deux partitions, chacune avec 3 enregistrements. Cette expression retournerait les IDs suivants : 0, 1, 2, 8589934592 (1L << 33), 8589934593, 8589934594.
Exemples
Exemple 1 : générer des ID à augmentation monotone
from pyspark.sql import functions as sf
spark.range(0, 10, 1, 2).select(
"*",
sf.spark_partition_id(),
sf.monotonically_increasing_id()).show()
+---+--------------------+-----------------------------+
| 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|
+---+--------------------+-----------------------------+