My Spark Job从文本文件中读取行,然后使用zipWithIndex
为每行添加唯一索引:
JavaPairRDD<Long, String> docsWithIndexes = sc
.textFile("test.txt")
.zipWithIndex()
.mapToPair(t -> new Tuple2<Long, String>(t._2, t._1));
docsWithIndexes
包含其中key是索引(由zipWithIndex
生成)的对,以及来自文件的文本行的值。
在这个工作的后期阶段,我会向驱动程序收集一组索引List<Set<Long>> setsOfDocs
。这些集合中的索引与docsWithIndexes
中的索引相同。我想要实现的是用setsOfDocs
中的文本行替换docsWithIndexes
中每个集合中的索引号,从而有效地将每个索引与其对应的文本行匹配。
我认为必须涉及join
,但我不知道如何在每个集合中进行匹配。我需要保持这些设置而不是将它们弄平,因为最终我需要将每个集合分别写入输出文件作为单独的行。
当然,在驱动程序中,我可以docsWithIndexes.collectAsMap()
并使用它来匹配setsOfDocs
中可以解决我的问题的索引,但是在内存消耗方面这将是残酷的。我想要的是在我的集群节点上执行文本匹配的索引,并将结果写入HDFS。