#java #scala #apache-spark #hbase #hortonworks-data-platform
#java #scala #apache-spark #hbase #hortonworks-платформа данных
Вопрос:
Я пытаюсь прочитать таблицу HBase с помощью Spark Scala API.
Пример кода:
conf.set("hbase.master", "localhost:60000")
conf.set("hbase.zookeeper.quorum", "localhost")
conf.set(TableInputFormat.INPUT_TABLE, tableName)
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
println("Number of Records found : " hBaseRDD.count())
Как добавить where
предложение, если я использую newAPIHadoopRDD
?
Или нам нужно использовать any Spark Hbase Connector
для достижения этой цели?
Я видел приведенный ниже соединитель Spark Hbase, но я не вижу никакого примера кода с предложением where.
Ответ №1:
Для достижения этой цели вы можете использовать SHC connector от HortonWorks.
https://github.com/hortonworks-spark/shc
Вот пример кода с Spark 2.
val catalog =
s"""{
|"table":{"namespace":"default", "name":"my_table"},
|"rowkey":"id",
|"columns":{
|"id":{"cf":"rowkey", "col":"id", "type":"string"},
|"name":{"cf":"info", "col":"name", "type":"string"},
|"age":{"cf":"info", "col":"age", "type":"string"}
|}
|}""".stripMargin
val spark = SparkSession
.builder()
.appName("hbase spark")
.getOrCreate()
val df = spark
.read
.options(
Map(
HBaseTableCatalog.tableCatalog -> catalog
)
)
.format("org.apache.spark.sql.execution.datasources.hbase")
.load()
df.show()
Затем вы можете использовать любой метод в своем фрейме данных. Пример :
df.where(df("age") === 20)
Комментарии:
1. Я пытаюсь использовать его, другие поля выводятся нормально, но cf: rowkey не выводится в целевую таблицу, является ли это свойством SHC?