2017-04-21 84 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来说),查询应该是一样的。