从字符串中删除最后一个字符

时间:2019-05-10 11:00:57

标签: apache-spark pyspark apache-spark-sql

我正在尝试创建一个新的数据框列(b),从(a)中删除最后一个字符。 列a是具有不同长度的字符串,因此我正在尝试以下代码-

from pyspark.sql.functions import *
df.select(substring('a', 1, length('a') -1 ) ).show()

我收到TypeError:“列”对象不可调用

这似乎是由于使用了多个功能,但我不明白为什么要使用这些功能-

如果我对列长度进行硬编码,这将起作用

df.select(substring('a', 1, 10 ) ).show()

或者如果我自己使用长度,它会起作用

df.select(length('a') ).show()

为什么我不能使用多种功能? 有没有一种更简便的方法可以从列的所有行中删除最后一个字符?

2 个答案:

答案 0 :(得分:0)

使用substr

df.select(col('a').substr(lit(0), length(col('a')) - 1))

或使用regexp_extract

df.select(regexp_extract(col('a'), '(.*).$', 1))

函数substring不起作用,因为参数poslen必须是整数,而不是列 http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=substring#pyspark.sql.functions.substring

答案 1 :(得分:0)

您的代码几乎是正确的。您只需要使用len函数。

df = spark.createDataFrame([('abcde',)],['dummy'])

from pyspark.sql.functions import substring

df.select('dummy',substring('dummy', 1, len('dummy') -1).alias('substr_dummy')).show()

#+-----+------------+
#|dummy|substr_dummy|
#+-----+------------+
#|abcde|        abcd|
#+-----+------------+
相关问题