apache-spark - 从字符串中删除最后一个字符
问题描述
我正在尝试创建一个新的数据框列 (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()
为什么我不能使用多个功能?有没有更简单的方法从列中的所有行中删除最后一个字符?
解决方案
使用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
推荐阅读
- c# - C# 转换数据表值
- c# - 用 LINQ 表达式填充 DataGrid
- maven - 如何为 docker 配置 Maven/SpringBoot 项目的 pom.xml?
- flutter - Flutter:未处理的异常:错误状态:调用关闭后无法添加新事件(不一样的情况)
- swift - 如何使用 SwiftUI 给 UISwitch 一个内部阴影?
- html - 不能在不同的标签中分配两种样式
- android - 如何将 com.google.firebase.Timestamp 转换为 SQLite 可存储数据?
- html - 框不断下降到下一行 float: right
- vba - 如何使用 VBA 将 powerpoint 部分复制到新的演示文稿中
- reactjs - 在接口和类中多次指定相同声明的概念是什么?