我想识别那些有特定词语的句子。 正如您将在我的代码中看到的,我已经定义了一些术语和句子。我想打印所有具有这些定义术语的句子。
****这是我的代码:****
import scala.math.random
import org.apache.spark._
object Clasifying {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Classification")
.setMaster("local")
val sc = new SparkContext(conf)
val terms = Array("this", "is", "my", "pen")
val sentences = Array("this Date is mine",
"is there something",
"there are big dogs",
"The Date is mine",
"there may be something",
"where are pen",
"there is a dog",
"there are big cats",
"I am not able to to do it")
val rdd = sc.parallelize(sentences) // create RDD
val keys = terms.toSet // words required as keys.
val result = rdd.flatMap{ sen =>
val words = sen.split(" ").toSet;
val common = keys & words; // intersect
common.map(x => (x, sen)) // map as key -> sen
}
.groupByKey.mapValues(_.toArray) // group values for a key
.collect
println("*********************************")
result.foreach(println)
println("*********************************")
sc.stop()
}
我的代码将结果表示为:
*********************************
(pen,[Ljava.lang.String;@4cc76301)
(this,[Ljava.lang.String;@2f08c4b)
(is,[Ljava.lang.String;@3f19b8b3)
*********************************
虽然我想要一个结果,如:
*********************************
{this, is,(this Date is mine)}
{is,(is there something)}
{is,(the Date is mine)}
{is,(is there something)}
{pen,where are pen)}
*********************************
提前感谢,因为我是新手来点火和叠加溢出所以请原谅我的错误并随时编辑我的问题。
我想要的另一件事是,如果不是定义简单的术语和句子,我会使用一些真正的terms.txt文件和ducoment.txt作句子?这种饱和度的代码怎么样?
答案 0 :(得分:1)
这主要取决于文档的大小和单词列表的大小。
如果您能够将完整的单词列表保存在内存中并且每个容器中都包含完整的文档,那么您只需使用地图就可以通过UDF轻松完成。 如果没有,那么您可以先收集每个文档中的所有单词,然后将它们与您的单词列表一起加入,以使单词变为匿名"。
小心不要烫伤自己:D