Поиск ключевых слов в Spark Scala на основе позиции - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть 2 файла, как показано ниже.

Файл ключевых слов

spark
scala
hive

Файл содержимого

this is spark.
this can be scala and spark.
this is hive.

Моя цель - найти ключевые слова в каждой строкесодержимого файла.Во время поиска я должен иметь возможность получить только последнее вхождение ключевого слова (т. Е. Даже если содержимое содержит 2 ключевых слова, я должен взять только последнее вхождение) и создать CSV-файл для загрузки данных в таблицу кустов.

Ожидаемый результат

"this is spark.","spark"
"this can be scala and spark.","spark"
"this is hive.","hive"

В моем файле содержимого миллионы строк.Каков наилучший и оптимизированный способ получения результата

1 Ответ

0 голосов
/ 29 декабря 2018

Вопрос очень абстрактный, при условии, что содержимое загружено в RDD, а ключевые слова загружены в список, работает код ниже.

scala> val contents = sc.parallelize(Seq("this is spark.","this can be scala and spark.","this is hive."))
contents: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[137] at parallelize at <console>:24

scala> val keywordsRdd = sc.parallelize(Seq("spark", "scala", "hive"))
keywordsRdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[138] at parallelize at <console>:24

scala> val keywords:List[String] = keywordsRdd.collect.toList
keywords: List[String] = List(spark, scala, hive)

scala> val mappedData = contents.flatMap(x=>x.split(",")).map(x => (x,x.split("\\s+").last.replaceAll("[.]",""))).filter(x=> keywords.contains(x._2)).collect.foreach(println)
(this is spark.,spark)
(this can be scala and spark.,spark)
(this is hive.,hive)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...