HBase批处理与Spark Scala一起获得

时间:2018-10-15 18:40:40

标签: apache-spark hbase

我试图基于行键列表从HBase提取数据,API文档中有一个名为get(List gets)的方法,我试图使用它,但是编译器抱怨这样的事情,有没有人有这种经历

overloaded method value get with alternatives: (x$1: java.util.List[org.apache.hadoop.hbase.client.Get])Array[org.apache.hadoop.hbase.client.Result] <and> (x$1: org.apache.hadoop.hbase.client.Get)org.apache.hadoop.hbase.client.Result cannot be applied to (List[org.apache.hadoop.hbase.client.Get])

我尝试过的代码。

val keys: List[String] = df.select("id").rdd.map(r => r.getString(0)).collect.toList
   val gets:List[Get]=keys.map(x=> new Get(Bytes.toBytes(x)))
   val results = hTable.get(gets)

2 个答案:

答案 0 :(得分:0)

您的gets类型为List [Get]。这里的列表是Scala类型的。但是,HBase的get请求需要Java List类型。您可以使用Seq [Get]而不是List [Get],因为Scala Seq更接近Java List。 因此,您可以尝试以下代码:

val keys: List[String] = df.select("id").rdd.map(r => r.getString(0)).collect.toList
   val gets:Seq[Get]=keys.map(x=> new Get(Bytes.toBytes(x)))
   val results = hTable.get(gets)

答案 1 :(得分:0)

我最终使用JavaConvert将其设置为java.util.List,然后它起作用了

val gets:List[Get]=keys.map(x=> new Get(Bytes.toBytes(x)))
   import scala.collection.JavaConverters._
   val getJ=gets.asJava
   val results = hTable.get(getJ).toList