2017-04-21 80 views
0

所以,如果有如下所示的數據庫中的表:給出 1 AAA 2 DDD 3 CCC 由於AAA從RDD掃描星火採用指數在Hadoop數據庫表


Key2 DateTimeAge AAA1 XXX XXX XXX AAA2 XXX XXX XXX AAA3 XXX XXX XXX AAA4 XXX XXX XXX AAA5 XXX XXX XXX AAA6 XXX XXX XXX AAA7 XXX XXX XXX AAA8 XXX XXX XXX BBB1 XXX XXX XXX BBB2 XXX XXX XXX BBB3 XXX XXX XXX BBB4 XXX XXX XXX BBB5 XXX XXX XXX CCC1 XXX XXX XXX CCC2 XXX XXX XXX CCC3 XXX XXX XXX CCC4 XXX XXX XXX CCC5 XXX XXX XXX CCC6 XXX XXX XXX CCC7 XXX XXX XXX DDD1 XXX XXX XXX DDD2 XXX XXX XXX DDD3 XXX XXX XXX DDD4 XXX XXX XXX DDD5 XXX XXX XXX DDD6 XXX XXX XXX DDD7 XXX XXX XXX 我有一個第二個表, ,DDD和CCC在表2中,我想要掃描所有與這些來自表1的3個值相對應的行,即我想獲得AAA1-AAA8,DDD1 -DDD7和CCC1-CCC7。 table1是一個Hadoop數據庫表,並有數百萬行。我只想掃描它從我得到的table1行。 任何人都可以幫助我這樣做的有效方式?我有table1作爲RDD,而table2在HBase中。

+0

@Pushkr你能看看這個嗎? –

+0

你需要像https://github.com/Huawei-Spark/Spark-SQL-on-HBase這樣的spark和hbase連接器來做hbase表格掃描。 – Pushkr

回答

0

困難的部分實際上是從HortonworksHuawei設置HBase連接器。但是無論如何,我認爲你是在詢問關於查詢本身的信息,所以我很快用Hive構建了一個玩具示例(即使用shell創建HBase表,然後在Hive中添加一個create external table)。

然後我使用Hive上下文創建SQL上下文。

from pyspark.sql import HiveContext 
sqlContext = HiveContext(sc) 

完整的玩具表有3行:

df = sqlContext.sql("select * from hbase_table_1") 
df.show(3) 
+----+--------+ 
| key|column_1| 
+----+--------+ 
|AAA1| abcd| 
|AAA2| efgh| 
|BBB1| jklm| 
+----+--------+ 

和訪問HBase的rowkeys的一個子集:

df = sqlContext.sql("select * from hbase_table_1 where key >= 'AAA' and key < 'BBB'") 
df.show(3) 
+----+--------+ 
| key|column_1| 
+----+--------+ 
|AAA1| abcd| 
|AAA2| efgh| 
+----+--------+ 

出於性能,你應該明確地去爲HBase的一連接器,但是一旦你擁有它(至少對於Hortonworks來說),查詢應該是一樣的。