Java SPARK saveAsTextFile为NULL

时间:2016-05-10 14:26:11

标签: java apache-spark

   JavaRDD<Text> tx= counts2.map(new Function<Object, Text>() {
        @Override
        public Text call(Object o) throws Exception {
            // TODO Auto-generated method stub
            if (o.getClass() == Dict.class) {
                Dict rkd = (Dict) o;
                return  new Text(rkd.getId());
            } else {
                return null ;
            }
        }

    });
   tx.saveAsTextFile("/rowkey/Rowkey_new");

我是Spark新手,我想保存此文件,但我得到了 Null异常。我不想使用返回 新文字()来替换 return null ,因为它会在我的文件中插入一个空行。那我怎么解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

您只需使用if条件构建RDD filter,而不是在地图中添加if条件。 Spark Quick Start是一个很好的起点。其他transformationsactions也有很好的概述。

基本上,您的代码可以如下所示(如果您使用的是Java 8):

counts2
  .filter((o)->o instanceof Dict)
  .map(o->new Text(((Dict)o).getId()))
  .saveAsTextFile("/rowkey/Rowkey_new");

您打算将一个传入记录映射到零或一个传出记录。使用map无法做到这一点。但是,filter映射到零个或一个记录,传入记录与传出记录匹配,flatMap允许映射到任何类型的零个或多个传出记录,从而为您提供更多灵活性。

奇怪的是,但并非不可思议的是,您创建的非Dict对象无论如何都将被进一步向下游过滤。可能您可以考虑将filter推向更上游,以确保只创建Dict个实例。在不知道其余代码的情况下,这只是一个假设,无论如何都不是原始问题的一部分。