Как создать уникальный автоматически сгенерированный столбец Id в кадре данных искры - PullRequest
1 голос
/ 25 марта 2019

У меня есть фрейм данных, в котором я должен создать уникальный идентификатор в одном из столбцов.Этот идентификатор должен быть создан со смещением.Потому что мне нужно сохранить этот фрейм данных с автоматически сгенерированным идентификатором, теперь, если новые данные поступают в автоматически сгенерированный идентификатор, они не должны конфликтовать с существующими.Я проверил монотонно возрастающую функцию, но она не принимает никакого смещения.Вот что я попробовал:

df=df.coalesce(1);
df = df.withColumn(inputCol,functions.monotonically_increasing_id());

Но есть ли способ заставить monotonically_increasing_id () начинаться с начального смещения?

Ответы [ 2 ]

4 голосов
/ 25 марта 2019

Или, если вы не хотите ограничивать вашу программу одним единственным разделом с df.coalesce(1), вы можете использовать zipWithIndex, который начинается с index = 0 следующим образом:

lines = [["a1", "a2", "a3"],
            ["b1", "b2", "b3"],
            ["c1", "c2", "c3"]]

    cols = ["c1", "c2", "c3"]

    df = spark.createDataFrame(lines, cols)

    start_indx = 10
    df = df.rdd.zipWithIndex() \
           .map(lambda (r, indx): (indx + start_indx, r[0], r[1], r[2])) \
           .toDF(["id", "c1", "c2", "c3"])

    df.show(10, False)

В этом случае я установил start_index = 10. И это будет вывод:

+---+---+---+---+
|id |c1 |c2 |c3 |
+---+---+---+---+
|10 |a1 |a2 |a3 |
|11 |b1 |b2 |b3 |
|12 |c1 |c2 |c3 |
+---+---+---+---+
0 голосов
/ 25 марта 2019

Вы можете просто добавить к нему минимальное значение для идентификатора.Обратите внимание, что не гарантируется, что значения начнутся с минимального значения

.withColumn("id", monotonically_increasing_id + 123)

Объяснение: Оператор + перегружен для столбцов https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/Column.scala#L642

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...