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



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

示例:00010002…..00110012

在这里,我根据行数值的长度,即列PAGENO,重复0到前缀的数字

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

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

实现动态0复制的想法:

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

获取错误:

"Column"对象不可调用

在传递任何列或参数时,而不是仅传递数字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|
#+------+--------+

最新更新