hbase表的javapairdd上的字数

yruzcnhs  于 2021-06-09  发布在  Hbase
关注(0)|答案(2)|浏览(382)

在其教程中有一个单词计数示例:

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://...");

不过,我已经有一个javapairdd作为 words 而不是像javardd那样:

JavaPairRDD<String, WebPage> myRDD

并希望对其进行字数统计(从hbase数据库检索)
那么,我该怎么数词呢?

nnvyjq4y

nnvyjq4y1#

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(" "));
                    }
                });

代码被分成多行,只是为了解释用法。你可以在一条线上把它都买下来。

gj3fmq9x

gj3fmq9x2#

你也可以做一些类似的事情。假设网页有一个函数 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(" "));
  })

从这里你现有的字数计算代码将发挥作用。

相关问题