【问题标题】:How can i read data from Hbase table in Spark?如何从 Spark 中的 Hbase 表中读取数据?
【发布时间】:2016-08-01 16:36:44
【问题描述】:

我在 Hbase 中有一个表,其中包含以下数据:

ROW COLUMN+CELL
1   column=brid:, timestamp=1470047093100, value=a1234
1   column=custid:, timestamp=1470046713207, value=811411
2   column=brid:, timestamp=1470047231583, value=a6789
2   column=custid:, timestamp=1470047156905, value=848727431

我正在尝试将这些数据读入 Spark,然后将表中的数据打印到控制台。我的代码如下:

val conf = new SparkConf().setAppName("Spark Base").setMaster("local[*]")
val sc = new SparkContext(conf)

val hbaseConf = HBaseConfiguration.create()
hbaseConf.set("hbase.zookeeper.quorum", "127.0.0.1")
hbaseConf.set("hbase.zookeeper.property.clientPort", "5181") 
hbaseConf.set(TableInputFormat.INPUT_TABLE, "/path/to/custid1") 

val hbaseData = sc.newAPIHadoopRDD(hbaseConf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])

hbaseData.map(row => Bytes.toString(row._2.getValue("custid".getBytes(), "brid".getBytes()))).collect().foreach(println)
println("Number of Records found : " + hbaseData.count())
sc.stop()

输出如下:

null
null
Number of Records found : 2

计数是正确的,因为 Hbase 表中只有两条记录。但为什么将值显示为空?而且,我怎样才能让它实际打印表中的值?

谢谢。

【问题讨论】:

    标签: scala hadoop apache-spark hbase


    【解决方案1】:

    row._2.getValue("custid".getBytes(), "brid".getBytes()) 采用参数列族、限定符(列名),在您的情况下,您有 2 个列族和空字符串作为限定符。因为custid:bird 是无效的列名,所以返回null。

    打印一些东西试试:row._2.getValue("bird".getBytes(), "".getBytes())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      相关资源
      最近更新 更多