2015-08-21 19 views
2

有一個字計數的例子在它的教程:字數上的HBase表的JavaPairRDD

JavaRDD<String> textFile = spark.textFile("hdfs://..."); 
JavaRDD<String> words = textFile.flatMap(new FlatMapFunction<String, String>() { 
    public Iterable<String> call(String s) { return Arrays.asList(s.split(" ")); } 
}); 
JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() { 
    public Tuple2<String, Integer> call(String s) { return new Tuple2<String, Integer>(s, 1); } 
}); 
JavaPairRDD<String, Integer> counts = pairs.reduceByKey(new Function2<Integer, Integer, Integer>() { 
    public Integer call(Integer a, Integer b) { return a + b; } 
}); 
counts.saveAsTextFile("hdfs://..."); 

不過,我已經有一個JavaPairRDD作爲words而不是JavaRDD像:

JavaPairRDD<String, WebPage> myRDD 

,並希望字數(這是從Hbase數據庫檢索)

那麼,我該如何做字數呢?

回答

0

你也可以做一些非常相似的事情。假設該網頁有一個名爲getText()功能(我知道它可能不具有確切的方法),你可以寫:

JavaPairRDD<String> words = myRDD.flatMap(
    new FlatMapFunction<Tuple2<String, WebPage> String>() { 
    public Iterable<String> call(Tuple2<String, WebPage> sW) { 
     return Arrays.asList(sW.getText().split(" ")); 
    }) 

,從這裏您現有的字數代碼將起作用。

0
JavaRDD<String> rdd = myRDD.flatMap(new FlatMapFunction<Tuple2<String, WebPage >, String>() { 
        @Override 
        public Iterable<String> call(Tuple2<String, WebPage > tuple2) { 
         //Get web page from the tuple 
         WebPage webPage = tuple2._2(); 
         //Invoke appropriate method to extract text 
         String pageText = <get page text> 
         return Arrays.asList(pageText.split(" ")); 
        } 
       }); 

代碼被分成多行,只是爲了解釋用法。你可以把它全部放在一行中。