hbase数据上的Spark作业

时间:2016-03-18 14:12:08

标签: apache-spark hbase

我是新来的火花,我正试图从以下架构的HBASE表中获取我的facebook数据:

FB data schema

我想对它做一个火花工作,如下所述。以下是获取JavaPairRDD的代码。

    SparkConf sparkConf = new SparkConf().setAppName("HBaseRead").setMaster("local[2]");
    sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
    sparkConf.set("spark.kryoserializer.buffer.mb", "256");
    sparkConf.set("spark.kryoserializer.buffer.max", "512");
    JavaSparkContext sc = new JavaSparkContext(sparkConf);
    Configuration conf = HBaseConfiguration.create();
    conf.set("hbase.zookeeper.quorum", "localhost:2181");
    conf.set("hbase.regionserver.port", "60010");
    String tableName = "fbData";
    conf.set("hbase.master", "localhost:60010");
    conf.set(TableInputFormat.INPUT_TABLE, tableName);
    JavaPairRDD<ImmutableBytesWritable, Result> hBaseRDD = sc.newAPIHadoopRDD(conf, TableInputFormat.class,
            ImmutableBytesWritable.class, Result.class);

现在使用RDD的map()我可以使用类型列获取发布/评论/回复的JavaRDD:

JavaRDD<Post> results = hBaseRDD.map(new Function<Tuple2<ImmutableBytesWritable, Result>, Post>() {
   //fetching posts 
   return post;
}

现在我有3个JavaRDD用于帖子,评论和回复。 POJO Post有评论和回复字段。所以我想使用父帖子ID添加评论和回帖。我怎样才能用Spark完成这个任务?我想到的方法是遍历所有帖子,然后遍历所有评论和回复。提前致谢。

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是制作3个RDDs JavaPairRDDs,并将注释中的字段作为关键字。然后,您可以使用join方法。

假设结果和评论RDD是对RDD,那么你可以这样做:

JavaPairRDD<??> aggregatedResults = results.join(comments)

我不知道您将使用哪种类型的组合对象。