如何迭代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
答案 0 :(得分:1)
您可以使用void foreach(VoidFunction<T> f)
方法。更多信息和方法:https://spark.apache.org/docs/1.1.0/api/java/org/apache/spark/api/java/JavaRDDLike.html#foreach(org.apache.spark.api.java.function.VoidFunction)
答案 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中的数据类型更改数据类型。