【问题标题】:Auto - Incrementing pyspark dataframe column values自动 - 递增 pyspark 数据框列值
【发布时间】:2018-10-14 21:36:06
【问题描述】:

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

这里是代码

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

感谢任何帮助。

【问题讨论】:

  • 由于 UDF 可以在不同的工作人员中执行,python global 变量没有意义,因为全局变量绑定到进程。

标签: python apache-spark pyspark user-defined-functions pyspark-sql


【解决方案1】:

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

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

检查docs for more info

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

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

【讨论】:

  • 您的第一个链接已损坏。
猜你喜欢
  • 2017-03-22
  • 1970-01-01
  • 2019-12-31
  • 2011-12-02
  • 2016-03-07
  • 2020-11-22
  • 2019-03-21
  • 2014-01-06
  • 2014-07-20
相关资源
最近更新 更多