Spark:将HBase行键的RDD映射到值的RDD

时间:2016-01-21 13:25:09

标签: apache-spark hbase

我有一个包含HBase行键的RDD。 RDD相对较大以适应内存。我需要为每个提供的密钥获取RDD值。有没有办法做这样的事情:

keys.map(key => table.get(new Get(key)))

所以问题是如何获取HTable内部地图任务的实例?我应该为每个分区实例化HConnection,然后从中获取HTable实例,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

您可以做几个选项,但首先要考虑一下火花确实允许您创建RDD的RDD。所以真的让你有两个选择

  1. RDD列表
  2. 键/值RDD
  3. 我强烈推荐第二个,因为RDD的列表可能会结束,你需要执行大量的减少,这可能会大量增加你需要执行的shuffle数量。考虑到这一点,我建议你使用flatMap。

    所以这里有一些基本的骨架代码可以帮助你获得结果

    val input:RDD[String]
    val completedRequests:RDD[(String, List[String]) = input.map(a => (a, table.get(new Get(a)))
    val flattenedRequests:RDD[(String, String) = completedRequests.flatMap{ case(k,v) => v.map(b =>(k,b))
    

    您现在可以将RDD作为一个对象处理,如果您需要一个特定的信息,则可以使用reduceByKey,现在spark将能够以最佳的并行性访问数据。

    希望有所帮助!