因此,如果数据库中有一个表如下所示:
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
我有第二张桌子,给出了
1 AAA
2 DDD
3 CCC
由于AAA,DDD和CCC在表2中,我想从table1扫描对应于这3个值的所有行,即我想得到AAA1-AAA8,DDD1 -DDD7和CCC1-CCC7。
table1是一个Hadoop数据库表,有数百万行。我只想扫描它从table1获得的行。
任何人都可以用这种有效的方式帮助我吗?我将table1作为RDD,table2在HBase中。
答案 0 :(得分:0)
困难的部分实际上是从Hortonworks或Huawei设置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&#39;),查询应该是相同的。