我是新来的火花和尝试学习。这是一个相当简单的问题,我有下面的代码来减少重复键w.r.t到他们的值。如何在Apache Spark中执行简单的reduceByKey?
数据帧都会有这样的价值观。
subject object
node1 node5
node1 node6
node1 node7
node2 node5
node2 node7
而且我希望他们能像这样减少。
subject object
node1 [node5,node6,node7]
node2 [node5,node7]
我能实现这个使用groupByKey
方法,但我想在这里使用reduceByKey
对此我无法理解什么是执行这一正确的语法。
这里是我的代码:
DataFrame records = Service.sqlCtx().sql("SELECT subject,object FROM Graph");
JavaPairRDD<String,Iterable<String>> rows = records.select("subject","object").toJavaRDD().mapToPair(
new PairFunction<Row,String,String>(){
@Override
public Tuple2<String, String> call(Row row) throws Exception {
return new Tuple2<String, String>(row.getString(0), row.getString(1));
}
// this can be optimized if we use reduceByKey instead of groupByKey
}).distinct().groupByKey().cache();