Авто - Увеличение значений столбца данных pyspark - PullRequest
0 голосов
/ 04 мая 2018

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

Вот код

def autoIncrement():
    global rec
    if (rec == 0) : rec = 1 
    else : rec = rec + 1
    return int(rec)

rec=14

UDF

autoIncrementUDF = udf(autoIncrement,  IntegerType())


df1 = hiveContext.sql("select id,name,location,state,datetime,zipcode from demo.target")

df1.withColumn("id2", autoIncrementUDF()).show()

Вот результат df

+---+------+--------+----------+-------------------+-------+---+
| id|  name|location|     state|           datetime|zipcode|id2|
+---+------+--------+----------+-------------------+-------+---+
| 20|pankaj| Chennai| TamilNadu|2018-03-26 11:00:00|   NULL| 15|
| 10|geetha| Newyork|New Jersey|2018-03-27 10:00:00|   NULL| 15|
| 25| pawan| Chennai| TamilNadu|2018-03-27 11:25:00|   NULL| 15|
| 30|Manish| Gurgoan|   Gujarat|2018-03-27 11:00:00|   NULL| 15|
+---+------+--------+----------+-------------------+-------+---+

Но я ожидаю, что результат ниже

+---+------+--------+----------+-------------------+-------+---+
| id|  name|location|     state|           datetime|zipcode|id2|
+---+------+--------+----------+-------------------+-------+---+
| 20|pankaj| Chennai| TamilNadu|2018-03-26 11:00:00|   NULL| 15|
| 10|geetha| Newyork|New Jersey|2018-03-27 10:00:00|   NULL| 16|
| 25| pawan| Chennai| TamilNadu|2018-03-27 11:25:00|   NULL| 17|
| 30|Manish| Gurgoan|   Gujarat|2018-03-27 11:00:00|   NULL| 18|
+---+------+--------+----------+-------------------+-------+---+

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 04 мая 2018

Глобальные переменные ограничены процессом Python. UDF может выполняться параллельно на разных рабочих в некотором кластере и должно быть детерминированным.

Вы должны использовать функцию monotonically_increasing_id() из модуля pyspark.sql.functions.

Проверьте документы для получения дополнительной информации .

Вы должны быть осторожны, потому что эта функция динамическая и не липкая:

Как добавить постоянный столбец идентификаторов строк в Spark DataFrame?

...