使用JavaPairRDD加入JavaRDD

时间:2017-05-25 11:50:51

标签: java apache-spark join

我有两个文件,一个包含anagrafic数据(ID,名称,姓氏),另一个包含银行操作(ID,金额,idPerson)。

我提取了两个JavaRDD:一个关于人,另一个关于每个人的总量'操作(通过reduceByKey)。

如何创建一个新的JavaPairRDD<Integer, Subject>,其中整数是金额而主题是人?

我尝试了这个但是没有工作:

JavaRDD<String> pLines = jsc.textFile("operations.csv").filter(x->!x.contains("ID"));
JavaRDD<String> pLines2 = jsc.textFile("anagraphic.txt").filter(x->!x.contains("\"ID\""));
JavaRDD<Soggetto> pSoggetti = pLines2.map(new EstraiSoggetti());
JavaPairRDD<Integer, Integer> pIDSubjectAmount = pTransazioni.mapToPair((x)->new Tuple2<Integer,Integer>(x.subject, x.amount));
JavaPairRDD<Integer, Transazione> pTransazioni2 = pLines.mapToPair(new EstraiTransazioniPair());
JavaPairRDD<Integer, Integer> pFrequencies2 = pIDSubjectAmount.reduceByKey(new Sum());
JavaPairRDD<Integer, Tuple2<Transazione, Soggetto>> pSoggettiTransazioni = pTransazioni2.join(pSoggetti2);
List<Tuple2<Integer, Soggetto>> list = pSoggetti2.collect();

我用于提取的函数

public class EstraiSoggetti implements Function<String, Soggetto> { 
    public Soggetto call(String line) throws Exception { 
        String [] fields = line.split(";"); 
        return new Soggetto(Integer.parseInt(fields[0]), fields[1], fields[2]); 
    } 
}
public class EstraiTransazioniPair implements PairFunction<String, Integer, Transazione> { 
    public Tuple2<Integer, Transazione> call(String line) throws Exception { 
         String [] fields = line.split(";"); 
         return new Tuple2<Integer, Transazione>(Integer.parseInt(fields[2]), new Transazione(Integer.parseInt(fields[0]), Integer.parseInt(fields[1]), Integer.parseInt(fields[2]), Integer.parseInt(fields[3]), fields[4])); 
    } 
 }

0 个答案:

没有答案