【问题标题】:Spark Scala: Efficient way to compare words in two stringsSpark Scala:比较两个字符串中的单词的有效方法
【发布时间】:2019-03-01 00:13:08
【问题描述】:

我正在寻找一种有利于 Spark 并行性的有效方法,它将比较两个字符串中的单词。这两个字符串将是两个数据集中的一列。 任务很简单:计算一个字符串中出现在另一个字符串中的匹配单词的数量。
例如,“AA BB CC”、“AA A CC DD”-> 2(单词 AA 和 CC)
例如,“BB CC”、“AA A CC DD”-> 1(单词 CC)

scala中是否有一种有效的方法可以应用,而不是编写一个循环来遍历一个字符串中的每个单词?

【问题讨论】:

  • 您能否详细说明“将成为两个数据集中的列”?你需要做一个crossJoin() 来比较每个可能的值吗?数据集是什么样的?
  • DS1 将有一列包含第一个字符串; DS2 将有一列包含第二个字符串。这些数据集可能有额外的列。我必须从第一个数据集中取出每个字符串,并与第二个数据集中的每个字符串进行比较,看看每个字符串中有多少常用词。

标签: scala apache-spark


【解决方案1】:

拆分字符串,转换为集合,求交集

def common_words(x: String, y: String) = x.split(" ").toSet.intersect(y.split(" ").toSet)

用法:

common_words("AA BB CC", "AA A CC DD")
res3: scala.collection.immutable.Set[String] = Set(AA, CC)
scala> common_words("BB CC", "AA A CC DD")
res4: scala.collection.immutable.Set[String] = Set(CC)

【讨论】:

  • 谢谢你,因为我想要匹配的数量,我只需要在此之后执行计数操作。
猜你喜欢
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
相关资源
最近更新 更多