Spark JavaPairRDD迭代

时间:2014-09-30 12:28:39

标签: apache-pig apache-spark

如何迭代JavaPairRDD。我已经完成了一个分组并获得了一个RDD,如下面的JavaPairRDD(元组7字符串和对象列表)

现在我必须迭代这个RDD并做一些像Pig中的FOR EACH一样的计算。 基本上我想迭代键和值列表并执行一些操作然后返回JavaPairRDD?

JavaPairRDD<Tuple7<String, String,String,String,String,String,String>, List<Records>> sizes =     
piTagRecordData.groupBy( new Function<Records, Tuple7<String, String,String,String,String,String,String>>() {
        private static final long serialVersionUID = 2885738359644652208L;
        @Override
        public Tuple7<String, String,String,String,String,String,String> call(Records row) throws Exception {
            Tuple7<String, String,String,String,String,String,String> compositeKey = new Tuple7<String, String, String, String, String, String, String>(row.getAsset_attribute_id(),row.getDate_time_value(),row.getOperation(),row.getPi_tag_count(),row.getAsset_id(),row.getAttr_name(),row.getCalculation_type());  
            return compositeKey;
        }
    });

在此之后我想执行FOR EACH大小的成员(JavaPairRDD),操作 - 类似

rejected_records = FOREACH sizes GENERATE FLATTEN(Java function on the List of Records based on the group key

我正在使用Spark 0.9.0

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

即使你在谈论&#34; FOR EACH&#34;,听起来你真的想要flatMap操作,因为你想要产生新的值并使它们变平。这适用于Java RDD,包括JavaPairRDD

答案 2 :(得分:1)

如果你想查看JavaPairRDD的某些值,我会这样做

for (Tuple2<String, String> test : pairRdd.take(10)) //or pairRdd.collect()
           {
               System.out.println(test._1);
               System.out.println(test._2);
          }

注意:Tuple2(假设您在JavaPairRDD中有字符串),根据存储在JavaPairRDD中的数据类型更改数据类型。