从pyspark DF获取子字符串

4c8rllxm  于 2022-12-30  发布在  Apache
关注(0)|答案(3)|浏览(182)

我有以下DF

name
Shane
Judith
Rick Grimes

我想生成下面这个

name           substr
Shane          hane
Judith         udith
Rick Grimes    ick Grimes

我试过:

F.substring(F.col('name'), 1)
F.substring(F.col('name'), 1, None)
F.substring(F.col('name'), 1, F.length(F.col('name')))

但所有这些方法都给我带来了一个错误。
如何获得所需的输出?

ercv8c1e

ercv8c1e1#

您可以使用expr获得所需的输出

from pyspark.sql.functions import expr
F.withColumn('substr',expr("substring(name, 2, length(name)-1)"))
y1aodyip

y1aodyip2#

spark文档用于索引不基于0的子字符串状态
第一个月
pyspark.sql.functions.substring

df.withColumn('sub_string', F.expr("substring(name, 2, length(name)-1)"))
pgx2nnw8

pgx2nnw83#

F.substring接受整数,因此只有在传递整数时才有效。

F.substring('name', 2, 5)

# This doesn't work. substring doesn't take Column (F.length()) 
F.substring('name', 2, F.length('name'))

如果您想传递一个动态值,可以传递SQL的子字符串或Col.substr

SQL语言

F.expr('substring(name, 2, length(name))')

**一个

这将采用Column(许多Pyspark函数返回Column,包括F.length)或int。尽管如此,startPos和length必须属于同一类型。例如:如果需要传递Column作为长度,请使用lit作为startPos。

F.col('name').substr(F.lit(2), F.length('name'))

# If you pass integer for both.
# F.col('name').substr(2, 5)

相关问题