首页 > 解决方案 > 从字符串中删除最后一个字符

问题描述

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

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

我得到一个 TypeError: 'Column' object is not callable

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

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

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

或者如果我自己使用长度,它可以工作

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

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

标签: apache-sparkpysparkapache-spark-sql

解决方案


使用substr

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

或使用regexp_extract

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

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


推荐阅读