我正在尝试在pyspark数据框中的每一行中删除列的前两个字符。以下字符的长度不同,因此我不能将解决方案与substring一起使用。
示例数据框:
columns = ['text']
vals = [(h0123),(b012345), (xx567)]
编辑 实际上,问题变得更加复杂,因为有时我会有一个字母和两个零作为第一个字符,然后需要将两者都减为0。
示例:
columns = ['text']
vals = [(h0123),(b012345), (x00567), (L0034)]
预期结果:
(123),(12345), (567), (34)
答案 0 :(得分:1)
您可以使用pyspark.sql.functions.expr()
来调用substring
,并将字符串减n
的长度作为len
的参数。
from pyspark.sql.functions import expr
n = 2
df.withColumn(
"new_text",
expr("substring(text, {n}+1, length(text)-{n})".format(n=n))
).show()
#+-------+--------+
#| text|new_text|
#+-------+--------+
#| h0123| 123|
#|b012345| 12345|
#| xx567| 567|
#+-------+--------+
您还可以将其转换为功能:
def lstrip(column, n):
# should probably add error checking on inputs
return expr("substring(`{col}`, {n}+1, length(`{col}`)-{n})".format(col=column, n=n))
df.withColumn("new_text", lstrip(column="text", n=n)).show()
# Same as above