Apache spark 打开多个Hbase表

Apache spark 打开多个Hbase表,apache-spark,hbase,spark-streaming,Apache Spark,Hbase,Spark Streaming,我是Spark的新用户,希望将流式数据保存到多个Hbase表中。当我想将数据保存在一个文件中时,我没有遇到任何问题,但对于多个文件,我无法处理 我曾尝试创建多个HTable,但后来我注意到该类仅用于与单个HBase表通信 有没有办法做到这一点 这就是我尝试创建多个htable的地方(当然不起作用,但这是我的想法) 这里是我尝试使用它们的地方(尽管有一个HTable工作) events.foreachRDD{event=> var j=0 event.foreach{feature=> 如果(j我

我是Spark的新用户,希望将流式数据保存到多个Hbase表中。当我想将数据保存在一个文件中时,我没有遇到任何问题,但对于多个文件,我无法处理

我曾尝试创建多个HTable,但后来我注意到该类仅用于与单个HBase表通信

有没有办法做到这一点

这就是我尝试创建多个htable的地方(当然不起作用,但这是我的想法)

这里是我尝试使用它们的地方(尽管有一个HTable工作)

events.foreachRDD{event=>
var j=0
event.foreach{feature=>

如果(j我确认有一种方法可以很好地工作,请使用hbase rdd库。

使用方便,请参阅使用说明


您可以尝试使用MultiTableOutputFormat,因为我确认它与传统的mapreduce配合使用效果很好。我还没有从Spark使用它。

如果您提供代码示例,您的问题可能会得到更多关注。谢谢您的提示Eric,我刚刚提供了我的代码:)这个库看起来很有趣。我一直在玩它,从文件中读取数据,但我不知道如何创建RDD[(String,Map[String,a])从流式数据。因为在event.foreach块中,我一个接一个地获取数据。也许你知道怎么做吗?非常感谢:)我没有使用Spark流式,但基本方法是“使用“转换”将RDD转换为RDD,而不是使用foreach。
 //HBASE Tables
val tableFull = "table1"
val tableCategoricalFiltered = "table2"

// Add local HBase conf
val conf1 = HBaseConfiguration.create()
val conf2 = HBaseConfiguration.create()

conf1.set(TableInputFormat.INPUT_TABLE, tableFull)
conf2.set(TableInputFormat.INPUT_TABLE, tableCategoricalFiltered)

//Opening Tables
val tableInputFeatures = new HTable(conf1, tableFull)
val tableCategoricalFilteredFeatures = new HTable(conf2, tableCategoricalFiltered)
events.foreachRDD { event =>

    var j = 0
    event.foreach { feature =>

            if ( j <= 49 ) {
                    println("Feature " + j + " : " + featuresDic(j))
                    println(feature)

                    val p_full = new Put(new String("stream " + row_full).getBytes())
                    p_full.add(featuresDic(j).getBytes(), "1".getBytes(), new String(feature).getBytes())
                    tableInputFeatures.put(p_full)

                    if ( j != 26 || j != 27 || j != 28 || j != 29 ) {

                            val p_cat = new Put(new String("stream " + row_categorical).getBytes())
                            p_cat.add(featuresDic(j).getBytes(), "1".getBytes(), new String(feature).getBytes())
                            tableCategoricalFilteredFeatures.put(p_cat)
                    }else{
                            j = 0
                            row_full = row_full + 1

                            println("Feature " + j + " : " + featuresDic(j))
                            println(feature)

                            val p_full = new Put(new String("stream " + row_full).getBytes())
                            p_full.add(featuresDic(j).getBytes(), "1".getBytes(), new String(feature).getBytes())
                            tableInputFeatures.put(p_full)

                            val p_cat = new Put(new String("stream " + row_categorical).getBytes())
                            p_cat.add(featuresDic(j).getBytes(), "1".getBytes(), new String(feature).getBytes())
                            tableCategoricalFilteredFeatures.put(p_cat)
                    }

                    j  = j + 1
            }
    }