我有一个大型RDD。我需要把它分成两组。第一组我需要存储到磁盘,第二组我需要进一步处理然后存储到磁盘。现在我用2个过滤器实现了这个目标。我想过使用一个小组但不确定这会有什么帮助(实际上它甚至可能导致很多不必要的改组)。
我们假设我有以下JavaPairRDD<Boolean, SomeClass> rdd
让我们假设有true
键的记录构成了rdd的99%。此外,让我们假设rdd很大。
false
值的记录存储在磁盘上。true
值的记录进行进一步处理。我可以执行以下操作(psudo-code)
JavaPairRDD<Boolean, SomeClass> truthy = rdd.filter(selectTrueKeys());
JavaPairRDD<Boolean, SomeClass> falsy = rdd.filter(selectFalseKeys());
falsy
.map(prepareForStorage())
.saveAsNewAPIHadoopDataset(job.getConfiguration());
truthy
.map(mapToSomethingElse())
.combineByKey(create, combine, merge)
.map(prepareForStorage())
.saveAsNewAPIHadoopDataSet(job.getConfiguration());
过滤整套两次似乎很浪费。我想过用密钥对rdd
进行分组。但我认为这也无济于事。