Dav*_*vid 4 apache-spark apache-spark-sql pyspark
我正在尝试创建一个新的数据框列(b),从(a)中删除最后一个字符。a 列是一个具有不同长度的字符串,所以我正在尝试以下代码 -
from pyspark.sql.functions import *
df.select(substring('a', 1, length('a') -1 ) ).show()
Run Code Online (Sandbox Code Playgroud)
我收到 TypeError: 'Column' 对象不可调用
这似乎是由于使用了多个功能,但我无法理解为什么,因为这些功能是独立工作的 -
如果我对列长度进行硬编码,这将起作用
df.select(substring('a', 1, 10 ) ).show()
Run Code Online (Sandbox Code Playgroud)
或者如果我单独使用长度它就可以了
df.select(length('a') ).show()
Run Code Online (Sandbox Code Playgroud)
为什么我不能使用多个功能?有没有更简单的方法从列中的所有行中删除最后一个字符?
使用substr
df.select(col('a').substr(lit(0), length(col('a')) - 1))
Run Code Online (Sandbox Code Playgroud)
或使用regexp_extract:
df.select(regexp_extract(col('a'), '(.*).$', 1))
Run Code Online (Sandbox Code Playgroud)
函数substring不能作为参数pos,len需要是整数,而不是列
http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=substring#pyspark.sql.functions.substring
| 归档时间: |
|
| 查看次数: |
12643 次 |
| 最近记录: |