pyspark重复函数根据列数据长度动态传递参数

pyspark repeat function pass parameter dynamically based on column data length

要求:需要填充前缀为000的4位行号

示例: 0001,0002.....0011,0012

在这里,我根据行号值的长度重复零的数量作为前缀,即在列 PAGENO

df.select(F.repeat(F.lit(0), 3))

值 3 需要根据行号值动态更改。

我实现动态 0 复制的想法:

df.select(F.repeat(F.lit(0),(4 - F.length(df["PAGENO"]))))

获取错误:

'Column' object is not callable

当传递任何列或参数而不是数字 3 时,因为没有次数重复应该有效。

您可以在 SQL 表达式中使用它:

df.select(F.expr("repeat(0, length(PAGENO))")).show()

但是,如果我正确理解了您要使用 lpad 功能的问题。这是一个例子:

df = spark.createDataFrame([(1,), (2,), (10,), (12,), (11,)], ["PAGENO"])

df1 = df.withColumn("PAGENO_2", F.expr("lpad(PAGENO, 4, '0')"))

df1.show()
#+------+--------+
#|PAGENO|PAGENO_2|
#+------+--------+
#|     1|    0001|
#|     2|    0002|
#|    10|    0010|
#|    12|    0012|
#|    11|    0011|
#+------+--------+