我正在使用Spark。我有[{1}}形式的JavaPairRDD
。
我基本上检查了一个短语是否在URL指定的页面中,从而产生了上面的结构。
现在,我有几个重叠的短语(即“成为或”在“成为或不成为”),我想删除较大短语中包含的这些较短的短语。
我对Spark有点新,所以我不确定如何在Spark 中执行此操作。
我知道我可以创建一个双嵌套循环,如果我收集()元素,我会这样做,但我想知道是否有办法在Spark中进行减少或聚合。
基本上,我想要一个能检查每对短语的函数,如果一个短语不包含在另一个短语中,或者只返回一个短语,则返回两个短语。
或者,我想运行某种过滤器来删除这些较短的短语。
有什么想法吗?
编辑:我认为CombinebyKey或AggregateByKey都可以使用,但我不知道如何在Java中使用它们。什么是序列/组合器功能?
我想结合几个>的元素按键,并有一个元组列表,其中一个短语不包含在任何其他短语中。
答案 0 :(得分:0)
如果您按键分组(documentName),您可以定期收集短语,并循环处理(每个文档)。只要短语的总数相对较小,这将起作用,因此集合将适合内存。
如果您需要以分布式方式执行此操作,则需要执行flatMap将密钥转换为DodumentName + Phrase,以便以后您能够通过相似性减少(组合)