【问题标题】:Search and Count word occurrences in dataframe column value/string在数据框列值/字符串中搜索和计算单词出现次数
【发布时间】:2019-08-31 06:35:18
【问题描述】:

我正在处理我的 Spark/Scala 数据应用程序中的数据帧,其中数据帧中的一列具有带有或不带空格的巨大冗长字符串值(两种情况都是可能的),以及介于两者之间的许多其他奇怪字符符号和数字等。

rawDF.select($"id", $"date", $"content").show()

示例数据框(rawDF):

id  date        content
1   4/8/2019    CLM***120379893***John***CLM***Smith***blablabla**so..on…
2   4/8/2019    CLM***120379093***John***CLM***Smith***CLM***blablabla**so..on…
3   4/8/2019    CLM***139979893***John***Smith***blablabla**so..on…

我需要在数据框的$“content”列中搜索字符串“CLM”,并添加一个新列,其中包含出现次数或字数AS“wordcount”列。

val rawWordCountDF = rawDF.withColumn("wordcount", udf("content"))

我尝试了很多变体,但都没有给我预期的输出。有人可以帮助我使用可以产生以下输出的 UDF 吗?任何帮助或参考表示赞赏。谢谢。

id  date    wordcount   content
1   4/8/2019    2   CLM***120379893***John***CLM***Smith***blablabla**so..on…
2   4/8/2019    3   CLM***120379093***John***CLM***Smith***CLM***blablabla**so..on…
3   4/8/2019    1   CLM***139979893***John***Smith***blablabla**so..on…

【问题讨论】:

  • 您应该发布您的尝试。以及MCVE
  • 谢谢。会继续前进。

标签: sql scala apache-spark dataframe


【解决方案1】:

考虑使用findAllIn 匹配正则表达式模式(当然可以是文字子字符串)与字符串:

import org.apache.spark.sql.functions._
import spark.implicits._

val df = Seq(
  (1, "4/8/2019", "CLM***120379893***John***CLM***Smith***blablabla**so..on…"),
  (2, "4/8/2019", "CLM***120379093***John***CLM***Smith***CLM***blablabla**so..on…"),
  (3, "4/8/2019", "CLM***139979893***John***Smith***blablabla**so..on…")
).toDF("id", "date", "content")

def countAll(pattern: String) = udf((s: String) => pattern.r.findAllIn(s).size)

df.withColumn("wordcount", countAll("CLM")($"content")).show
// +---+--------+--------------------+---------+
// | id|    date|             content|wordcount|
// +---+--------+--------------------+---------+
// |  1|4/8/2019|CLM***120379893**...|        2|
// |  2|4/8/2019|CLM***120379093**...|        3|
// |  3|4/8/2019|CLM***139979893**...|        1|
// +---+--------+--------------------+---------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2021-01-09
    • 2021-10-15
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多