使用负索引从pyspark字符串列的最后一个索引中对多个字符进行子字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用负索引从pyspark字符串列的最后一个索引中对多个字符进行子字符串相关的知识,希望对你有一定的参考价值。

Spark Dataframe column with last character of other column 密切相关,但我想从-1索引中提取多个字符。


我有以下pyspark数据帧df

+----------+----------+
|    number|event_type|
+----------+----------+
|0342224022|        11|
|0112964715|        11|
+----------+----------+

我想从number列的最后一个索引中提取3个字符。

我尝试了以下方法:

from pyspark.sql.functions import substring 
df.select(substring(df['number'], -1, 3), 'event_type').show(2)

# which returns:

+----------------------+----------+
|substring(number,-1,3)|event_type|
+----------------------+----------+
|                     2|        11|
|                     5|        11|
+----------------------+----------+

以下是预期的输出(我不确定上面的输出是什么):

+----------------------+----------+
|substring(number,-1,3)|event_type|
+----------------------+----------+
|                   022|        11|
|                   715|        11|
+----------------------+----------+

我究竟做错了什么?

注意:Spark版本1.6.0

答案

这就是你如何使用substring。你的位置是-3,长度是3。

pyspark.sql.functions.substring(str, pos, len)

您需要将子字符串函数调用更改为:

from pyspark.sql.functions import substring
df.select(substring(df['number'], -3, 3), 'event_type').show(2)
#+------------------------+----------+
#|substring(number, -3, 3)|event_type|
#+------------------------+----------+
#|                     022|        11|
#|                     715|        11|
#+------------------------+----------+

以上是关于使用负索引从pyspark字符串列的最后一个索引中对多个字符进行子字符串的主要内容,如果未能解决你的问题,请参考以下文章

从 pyspark 数据框字符串列中获取第一个数值到新列中

如何从 Pyspark Dataframe 中的字符串列中过滤字母值?

连接字符串列和索引

Apache Spark:尝试索引字符串列时出现 ***Error

在 Pyspark 中屏蔽/替换字符串列的内部

从pandas DataFrame中另一列中的位置给定的字符串列中提取字符[重复]