Skip to main content
 首页 » 编程设计

python之自动之递增 pyspark 数据框列值

2024年08月16日31shanyou

我正在尝试在数据框中生成一个附加列,该列具有基于全局值的自动递增值。但是,所有行都是使用相同的值生成的,并且该值没有递增。

这是代码

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

用户定义函数

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| 
+---+------+--------+----------+-------------------+-------+---+ 

感谢任何帮助。

请您参考如下方法:

全局变量绑定(bind)到 python 进程。 UDF 可以在某个集群的不同 worker 上并行执行,并且应该是确定性的。

您应该使用 pyspark.sql.functions 模块中的 monotonically_increasing_id() 函数。

检查 docs for more info .

你应该小心,因为这个函数是动态的而不是粘性的:

How do I add an persistent column of row ids to Spark DataFrame?