如何使用 PySpark 查找另一列中子字符串列的位置?

N. *_* P. 3 apache-spark apache-spark-sql pyspark

如果我有一个包含两列的 PySpark DataFrame,text并且subtext,则 subtext保证会出现在 中的某个位置textsubtext我将如何计算在列中的位置text

输入数据:

+---------------------------+---------+
|           text            | subtext | 
+---------------------------+---------+
| Where is my string?       | is      |
| Hm, this one is different | on      |
+---------------------------+---------+
Run Code Online (Sandbox Code Playgroud)

预期输出:

+---------------------------+---------+----------+
|           text            | subtext | position |
+---------------------------+---------+----------+
| Where is my string?       | is      |       6  |
| Hm, this one is different | on      |       9  |
+---------------------------+---------+----------+
Run Code Online (Sandbox Code Playgroud)

注意:我可以使用静态文本/正则表达式来执行此操作,没有问题,但我无法找到任何使用特定于行的文本/正则表达式执行此操作的资源。

mck*_*mck 5

您可以使用locate。您需要减去 1,因为字符串索引从 1 开始,而不是 0。

import pyspark.sql.functions as F

df2 = df.withColumn('position', F.expr('locate(subtext, text) - 1'))

df2.show(truncate=False)
+-------------------------+-------+--------+
|text                     |subtext|position|
+-------------------------+-------+--------+
|Where is my string?      |is     |6       |
|Hm, this one is different|on     |9       |
+-------------------------+-------+--------+
Run Code Online (Sandbox Code Playgroud)