Apache spark 从Spark Streaming写入HBase

Apache spark 从Spark Streaming写入HBase,apache-spark,hbase,spark-streaming,Apache Spark,Hbase,Spark Streaming,我在Spark Streaming(使用Scala)中输入了由(键、值)对组成的文件,如果键满足特定条件,我需要做的是将值存储在HBase中。 因为我: val pair: DStream[(String, String)] 我尝试在映射中设置一个条件,然后尝试在HBase中插入值: pair.map(x => { if (x._1 == "condition") { val hconf = HBaseConfiguration.create() val hTable = new HTa

我在Spark Streaming(使用Scala)中输入了由(键、值)对组成的文件,如果键满足特定条件,我需要做的是将值存储在HBase中。 因为我:

val pair: DStream[(String, String)]
我尝试在映射中设置一个条件,然后尝试在HBase中插入值:

pair.map(x => {
if (x._1 == "condition")
{ val hconf = HBaseConfiguration.create()
val hTable = new HTable(hconf, "mytab")
val thePut = new Put(Bytes.toBytes(1))
thePut.add(Bytes.toBytes("colfamily"), Bytes.toBytes("c1"), Bytes.toBytes(x._2)
hTable.put(thePut)
})
}
然而,这不起作用,我在执行spark submit时遇到一个错误:没有注册输出操作,因此无法执行任何操作

这是我能想到的将值插入HBase的唯一方法,我做错了什么吗?你能帮我修一下吗

以下是更新的代码:

pair.foreachRDD(rdd => rdd.map( p =>
{val hconf = HBaseConfiguration.create()
 val hTable = new HTable(hconf,"mytab")
 val thePut = new Put(Bytes.toBytes(1))
 thePut.add(Bytes.toBytes("colfamily"), Bytes.toBytes(p._1), Bytes.toBytes(p._2)
 hTable.put(thePut)
})
当我使用Spark submit运行它时,会出现一个错误,上面写着“任务不可序列化”,您知道这意味着什么以及如何修复它吗

提前谢谢你

Jean

您收到错误消息的原因是您在代码中缺少对名为pair的RDD的操作

请参阅下面更正的代码

  pair.foreachRDD((rdd : [RDD(String,String)]) => {  
 val newRdd = rdd.map(p=> (p._1,p._2))
        if (mewRdd._1 == "condition")
        {
         /* Your code*/
        }})
要从spark streaming在hbase中插入数据,请参阅本文
我希望这能帮上忙。

谢谢你的回答,但是foreachRDD中的rdd类型是rdd[(字符串,字符串)],所以我无法直接进行rdd。\u 1,知道如何访问它吗?好的,然后使用这对。foreachRDD(rdd:rdd[(字符串,字符串)])。它会工作的。这就是我所做的,但是当我尝试做rdd时,它不在那里意味着rdd。它不能应用于rdd[(字符串,字符串)]类型,而是应用于(字符串,字符串)你能试试这个吗,-->pair.foreachRDD((rdd:rdd[(字符串,字符串)])=>{val newrdd=rdd.map(p=>(p.\u 1,p.\u 2))如果(newrdd.=“条件”)……将配置和表对象的创建从foreach中分离出来不是更好吗?甚至,添加一些批处理。。。