Regexp_replace Scala-Spark 数据帧中的部分 unicode(表情符号)

Regexp_replace PART of unicode (emoji) in Scala-Spark dataframe

我正在尝试使用 spark regexp_replace 替换所有 unicode starts 的表情符号 \uD83D 并将 unicode 的 部分 替换为 \uD83D,但我没有运气。

这是一个例子:

我想获取“”的所有实例(在 Scala 中是 \uD83D\uDE02)并将它们替换为“”。使用一个表情符号就足够简单了,并使用以下代码:

.select(functions.regexp_replace($"text2", "[(\uD83D\uDE02)]", " \uD83D\uDE02").as("split2"))

使用上面的代码,如果我在 text2 列中有一个类似 "" 的字符串,它将把它变成 " ",然后我可以很容易地用 space.

拆分它

我想将此应用于所有以 \uD83D 开头的表情符号,所以我认为这样做应该有效,但它不起作用:

.select(functions.regexp_replace($"text2", "[(\uD83D)]", " \uD83D").as("split2"))

这不会以任何方式影响数据。即使是以下内容也不会以任何方式影响数据,无论是否带有括号 and/or 方括号:

.select(functions.regexp_replace($"text2", "[(u)]", " \uD83D").as("split2"))

如果我可以只替换那些 unicode 字符串的前 6 个字符,text2 列中的以下内容:“”将导致“”,这正是我需要的。

感谢您的帮助!

您可以使用此正则表达式 \B\uD83D.{1} 并替换为捕获的组 </code> 和 space。然后 trim 去掉最后的 space 并拆分:</p> <pre><code>val df = Seq( (""), ("") ).toDF("text2") df.select( split( trim(regexp_replace($"text2", "(\B\uD83D.{1})", " ")), " " ).as("split2") ).show //+-----------------+ //| split2 | //+-----------------+ //|[, , , ]| //|[, , , ]| //+-----------------+