如何使用Spark在文本表中查找关键字?

hongyan

我是Spark的新手。我在HDFS中有两个表。一个表(表1)是一个标记表,由一些文本组成,可以是一些单词或句子。另一个表(表2)具有一个文本列。表1中每一行可能有多个关键字。我的任务是找出表1中表2中文本列的所有匹配关键字,并输出表2中每一行的关键字列表。

问题是我必须遍历表2和表1中的每一行。如果我为表1产生一个大列表,并为表2使用map函数,我仍然必须使用循环来遍历映射中的列表。功能。即使循环不大(万次),驱动程序也会显示JVM内存限制错误。

myTag是表1的标签列表。

def ourMap(line: String, myTag: List[String]): String = {
  var ret = line
  val length = myTag.length
  for (i <- 0 to length - 1) {
    if (line.contains(myTag(i)))
      ret = ret.replaceAll(myTag(i), "_")
  }
  ret
}

val matched = result.map(b => ourMap(b, tagList))

对完成这项任务有什么建议吗?带有或不带有Spark非常感谢!

示例如下:

表格1

row1|Spark  
row2|RDD 

表2

row1| Spark is a fast and general engine. RDD supports two types of operations.  
row2| All transformations in Spark are lazy.  
row3| It is for test. I am a sentence.

预期结果 :

row1| Spark,RDD  
row2| Spark  

主要编辑:

第一个表实际上可能包含句子,而不仅仅是简单的关键字:

row1| Spark  
row2| RDD  
row3| two words  
row4| I am a sentence
以利亚

在这里,请考虑您提供的数据样本:

val table1: Seq[(String, String)] = Seq(("row1", "Spark"), ("row2", "RDD"), ("row3", "Hashmap"))
val table2: Seq[String] = Seq("row1##Spark is a fast and general engine. RDD supports two types of operations.", "row2##All transformations in Spark are lazy.")
val rdd1: RDD[(String, String)] = sc.parallelize(table1)
val rdd2: RDD[(String, String)] = sc.parallelize(table2).map(_.split("##").toList).map(l => (l.head, l.tail(0))).cache

我们将建立第二个数据表的反向索引,并将其连接到第一个表:

val df1: DataFrame = rdd1.toDF("key", "value")
val df2: DataFrame = rdd2.toDF("key", "text")
val df3: DataFrame = rdd2.flatMap { case (row, text) => text.trim.split( """[^\p{IsAlphabetic}]+""")
  .map(word => (word, row))
}.groupByKey.mapValues(_.toSet.toSeq).toDF("word", "index")

import org.apache.spark.sql.functions.explode

val results: RDD[(String, String)] = df3.join(df1, df1("value") === df3("word")).drop("key").drop("value").withColumn("index", explode($"index")).rdd.map {
  case r: Row => (r.getAs[String]("index"), r.getAs[String]("word"))
}.groupByKey.mapValues(i => i.toList.mkString(","))

results.take(2).foreach(println)
// (row1,Spark,RDD)
// (row2,Spark)

主要编辑:

如评论中所述:问题的规格已更改。关键字不再是简单的关键字,它们可能是句子。在这种情况下,这种方法将行不通,这是另一种问题。一种方法是对最近邻居搜索使用局部敏感哈希(LSH)算法。

该算法的实现在这里可用

不幸的是,该算法及其实现太长,无法在SO上进行讨论。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用VsVim在多个文件中查找关键字

来自分类Dev

如何使用VsVim在多个文件中查找关键字

来自分类Dev

如何使用Php自动链接文本中的关键字?

来自分类Dev

如何使用“ |” Specflow功能表中的关键字

来自分类Dev

在文本段落中查找关键字(在Excel中)

来自分类Dev

在文本块中查找并替换多个不同的关键字

来自分类Dev

在文本中查找特定关键字的否定

来自分类Dev

如何从python中的数组检查推文的文本以查找特定关键字

来自分类Dev

如何从python中的数组检查推文的文本以查找特定关键字

来自分类Dev

使用Perl从文件中查找关键字并输出到文本文件

来自分类Dev

使用Perl从文件中查找关键字并输出到文本文件

来自分类Dev

使用PHP在文本文件arsort()中查找关键字

来自分类Dev

如何查找频率表关键字列是否包含列表中的所有值

来自分类Dev

如何在表的所有列中动态查找关键字

来自分类Dev

如何使用某些关键字查找包含这些关键字的文章?

来自分类Dev

如何通过Java在IPersistentMap中查找Clojure关键字?

来自分类Dev

如何在字符串中查找关键字

来自分类Dev

如何从Java查找IPersistentMap中的Clojure关键字?

来自分类Dev

希望如何使用Javascript在脚本数组中查找关键字

来自分类Dev

如何使用相同的关键字逐行索引多个文本?

来自分类Dev

使用javascript替换文本中的关键字

来自分类Dev

如何使用IN关键字?

来自分类Dev

如何使用SQL中的包含从另一个表中搜索关键字

来自分类Dev

当关键字类型为ElasticSearch中的文本时如何使用术语查询

来自分类Dev

如何从表中获取最近搜索的关键字?

来自分类Dev

elasticsearch如何使用精确搜索并忽略关键字中的关键字特殊字符?

来自分类Dev

在XML中查找关键字的计数

来自分类Dev

从逗号中查找匹配的关键字

来自分类Dev

在段落中查找特定的关键字

Related 相关文章

  1. 1

    如何使用VsVim在多个文件中查找关键字

  2. 2

    如何使用VsVim在多个文件中查找关键字

  3. 3

    如何使用Php自动链接文本中的关键字?

  4. 4

    如何使用“ |” Specflow功能表中的关键字

  5. 5

    在文本段落中查找关键字(在Excel中)

  6. 6

    在文本块中查找并替换多个不同的关键字

  7. 7

    在文本中查找特定关键字的否定

  8. 8

    如何从python中的数组检查推文的文本以查找特定关键字

  9. 9

    如何从python中的数组检查推文的文本以查找特定关键字

  10. 10

    使用Perl从文件中查找关键字并输出到文本文件

  11. 11

    使用Perl从文件中查找关键字并输出到文本文件

  12. 12

    使用PHP在文本文件arsort()中查找关键字

  13. 13

    如何查找频率表关键字列是否包含列表中的所有值

  14. 14

    如何在表的所有列中动态查找关键字

  15. 15

    如何使用某些关键字查找包含这些关键字的文章?

  16. 16

    如何通过Java在IPersistentMap中查找Clojure关键字?

  17. 17

    如何在字符串中查找关键字

  18. 18

    如何从Java查找IPersistentMap中的Clojure关键字?

  19. 19

    希望如何使用Javascript在脚本数组中查找关键字

  20. 20

    如何使用相同的关键字逐行索引多个文本?

  21. 21

    使用javascript替换文本中的关键字

  22. 22

    如何使用IN关键字?

  23. 23

    如何使用SQL中的包含从另一个表中搜索关键字

  24. 24

    当关键字类型为ElasticSearch中的文本时如何使用术语查询

  25. 25

    如何从表中获取最近搜索的关键字?

  26. 26

    elasticsearch如何使用精确搜索并忽略关键字中的关键字特殊字符?

  27. 27

    在XML中查找关键字的计数

  28. 28

    从逗号中查找匹配的关键字

  29. 29

    在段落中查找特定的关键字

热门标签

归档