空RDD转换的结果

时间:2017-10-18 14:44:56

标签: hadoop apache-spark

我有一个RDD(combinerRDD),我在其下面应用了转换

    JavaPairRDD<String, Integer> counts = combinerRDD.mapToPair(
            new PairFunction<Tuple2<LongWritable, Text>, String, Integer>() {
                String filename;
                Integer count;
                Message message;

                @Override
                public Tuple2<String, Integer> call(Tuple2<LongWritable, Text> tuple) throws Exception {
                    xlhrCount = 0;
                    filename = "";

                        filename = "New_File";
                        for (JobStep js : message.getJobStep()) {
                            if (js.getStepName().equals(StepName.NEW_STEP)) {
                                count += 1;
                            }
                        }

                    return new Tuple2<String, Integer>(filename, xlhrCount);
                }
            }).reduceByKey(new Function2<Integer, Integer, Integer>() {
                               @Override
                               public Integer call(Integer count1, Integer count2) throws Exception {
                                   return (count1 + count2);
                               }
                           }
    );

我的问题是当combinerRDD内部有一些数据时,我得到了正确的结果。但是当combinerRDD为空时,写入HDFS的结果只是一个空的_SUCCESS文件。我想在一个空的RDD转换的情况下有2个文件,即_SUCCESS和空的part-00000文件。我对吗?我应该得到多少输出文件。

我之所以要问这是因为我在2个集群中获得了不同的结果,在集群1上运行的代码导致_SUCCESS文件,集群2导致_SUCCESS并且空部分00000。我现在很困惑。结果是否依赖于任何群集设置?

注意:我在newRDD.leftOuterJoin(combinerRDD)上进行左连接,这没有给出任何结果(当combinerRDD只有_SUCCESS时),newRDD包含值。

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了解决方案。我正在使用spark-1.3.0,它有以下问题:即。带有空RDD的左外连接给出空结果。

https://issues.apache.org/jira/browse/SPARK-9236

我正在创建如下所示的空对RDD:

JavaRDD<Tuple2<LongWritable, Text>> emptyRDD = context.emptyRDD();
myRDD = JavaPairRDD.fromJavaRDD(emptyRDD);

现在使用:

List<Tuple2<LongWritable, Text>> data = Arrays.asList();
JavaRDD<Tuple2<LongWritable, Text>> emptyRDD = context.parallelize(data);
myRDD = JavaPairRDD.fromJavaRDD(emptyRDD);

它现在有效,即我的RDD不再是空的。修复版本可用: 1.3.2,1.4.2,1.5.0(参考上面的链接)。