2016-08-01 5 views
0

私はそれで次のデータを持っているのHBaseのテーブルを持っている:Sparkの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() 

出力は次のようになります:次のようにこれを達成するための私のコードは、HBaseのテーブル内の2つだけレコードがあるよう

null 
null 
Number of Records found : 2 

カウントが正しいです。しかし、なぜそれがヌルとして値を表示していますか?そして、テーブルの中の値を実際に印刷するにはどうしたらいいですか?

ありがとうございました。

答えて

0

row._2.getValue("custid".getBytes(), "brid".getBytes())は、2つの列ファミリと空の文字列が修飾子として使用される場合、パラメータ列ファミリ、修飾子(列名)をとります。 custid:birdは有効な列名ではないため、nullが戻されます。

何かを試してみてください:row._2.getValue("bird".getBytes(), "".getBytes())

関連する問題