Как добавить столбец с уникальным row_id для фрейма данных PySpark, который запускает row_id с max (row_id) +1 от предыдущего запуска кода - PullRequest
0 голосов
/ 09 января 2020

Я использовал приведенный ниже код для создания нового столбца с уникальным row_id, но каждый раз, когда я запускаю код, row_id начинается с 0. Я хочу, чтобы row_id начинался с самого высокого row_id из предыдущего запуска кода.

Пожалуйста, помогите!

from pyspark.sql.functions import monotonically_increasing_id
new_raw_df = raw_df.withColumn("id", monotonically_increasing_id())

1 Ответ

0 голосов
/ 09 января 2020

Здесь есть две вещи:

  1. monotonically_increasing_id не работает таким образом, он генерирует 64-битную ди git, начиная с 0 при каждом запуске и в возрастающем порядке, но если ваш фрейм данных имеет более одного раздела (raw_df.rdd.getNumPartitions()), тогда он добавит к нему хеш-код раздела. см. здесь .
  2. Если вам нужно добавить число к предыдущему прогону, сохраните его как переменную offset и добавьте к нему что-то вроде:
from pyspark.sql.functions import monotonically_increasing_id
# Have added 1 just in case you need the ids from 1 onwards and not zero
new_raw_df = raw_df.withColumn("id", monotonically_increasing_id() + 1 + offset) 

Также, если вы ищете механизм генерации суррогатного идентификатора, вы можете использовать df.rdd.zipWithIndex + offset, но вам все равно придется где-то хранить смещение от предыдущего spark-submit.

...