使用 RDD 中的索引扫描 Spark 中的 Hadoop 数据库 table
Scan a Hadoop Database table in Spark using indices from an RDD
所以如果数据库中有table如下所示:
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
我有第二个 table,给出为
1 AAA
2 DDD
3 CCC
由于 AAA、DDD 和 CCC 在 table2 中,我想从 table1 中扫描与这 3 个值对应的所有行,即,我想获得 AAA1-AAA8、DDD1 -DDD7 和 CCC1- CCC7。
table1 是一个 Hadoop 数据库 table,有数百万行。我只想扫描它以查找从 table1 获得的行。
任何人都可以帮助我有效地做到这一点吗?我有 table1 作为 RDD,table2 在 HBase 中。
困难的部分实际上是从 Hortonworks or from Huawei.
设置 HBase 连接器
但无论如何我认为你是在询问查询本身,所以我使用 Hive 快速构建了一个玩具示例(即使用 shell 创建 HBase table 然后添加 create external table
在 Hive 中)。
然后我使用 Hive 上下文创建一个 SQL 上下文。
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
完整的玩具table有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'),查询应该是相同的。
所以如果数据库中有table如下所示:
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
我有第二个 table,给出为
1 AAA
2 DDD
3 CCC
由于 AAA、DDD 和 CCC 在 table2 中,我想从 table1 中扫描与这 3 个值对应的所有行,即,我想获得 AAA1-AAA8、DDD1 -DDD7 和 CCC1- CCC7。
table1 是一个 Hadoop 数据库 table,有数百万行。我只想扫描它以查找从 table1 获得的行。
任何人都可以帮助我有效地做到这一点吗?我有 table1 作为 RDD,table2 在 HBase 中。
困难的部分实际上是从 Hortonworks or from Huawei.
设置 HBase 连接器但无论如何我认为你是在询问查询本身,所以我使用 Hive 快速构建了一个玩具示例(即使用 shell 创建 HBase table 然后添加 create external table
在 Hive 中)。
然后我使用 Hive 上下文创建一个 SQL 上下文。
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
完整的玩具table有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'),查询应该是相同的。