HBase batch get с искровым скалом - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь получить данные из 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 голосов
/ 17 октября 2018

В итоге я использовал 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
0 голосов
/ 17 октября 2018

ваши запросы имеют тип List [Get].Здесь список имеет тип Scala.Однако запрос HBase ожидает тип списка Java.Вы можете использовать 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)
...