gpt4 book ai didi

regex - 从 Spark 数据框中的字符串列中提取单词

转载 作者:行者123 更新时间:2023-12-02 01:39:13 24 4
gpt4 key购买 nike

我在 Spark 数据框中有一列包含文本。

我想提取以特殊字符 '@' 开头的所有单词,并且我正在该文本列的每一行中使用 regexp_extract。如果文本包含多个以 '@' 开头的单词,则仅返回第一个单词。

我正在寻找提取与 Spark 中的模式匹配的多个单词。

data_frame.withColumn("Names", regexp_extract($"text","(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9_]+)",1).show

示例输入:@always_nidhi @YouTube 不,我不明白,但我喜欢音乐,他们的舞蹈很棒,这个 mve 的所有歌曲都很摇滚

示例输出:@always_nidhi,@YouTube

最佳答案

您可以在spark中创建udf函数,如下所示:

import java.util.regex.Pattern
import org.apache.spark.sql.functions.udf
import org.apache.spark.sql.functions.lit

def regexp_extractAll = udf((job: String, exp: String, groupIdx: Int) => {
println("the column value is" + job.toString())
val pattern = Pattern.compile(exp.toString)
val m = pattern.matcher(job.toString)
var result = Seq[String]()
while (m.find) {
val temp =
result =result:+m.group(groupIdx)
}
result.mkString(",")
})

然后调用udf如下:

data_frame.withColumn("Names", regexp_extractAll(new Column("text"), lit("@\\w+"), lit(0))).show()

上面的输出如下:

+--------------------+
| Names|
+--------------------+
|@always_nidhi,@Yo...|
+--------------------+

根据您在问题中发布的输出,我使用了正则表达式。您可以修改它以满足您的需要。

关于regex - 从 Spark 数据框中的字符串列中提取单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47981699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com