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|
#+------+--------+
要求:需要填充前缀为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|
#+------+--------+