2017-04-21 8 views
0

ように、以下に示すデータベースのテーブルがある場合: 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


私は2番目のテーブルを持っている、AAAため 1 AAA 2 DDD 3 CCC として与えられたが、DDDとCCCがtable2にあるので、私はtable1からこれらの3つの値に対応するすべての行をスキャンしたい、すなわちAAA1-AAA8、DDD1 -DDD7およびCCC1-CCC7を取得したい。 テーブル1はHadoopデータベーステーブルで、数百万の行があります。私はtable1から取得する行だけをスキャンしたい。 これを行う有効な方法を教えてもらえますか?私はRDDとしてtable1を持っており、table2はHBaseにあります。

+0

@Pushkrこれをご覧ください。 –

+0

spbaseでhbaseテーブルのスキャンを行うには、https://github.com/Huawei-Spark/Spark-SQL-on-HBaseのようなsparkとhbaseコネクタが必要です。 – Pushkr

答えて

0

実際に難しい部分は、HBaseコネクタをHortonworksまたはHuaweiからセットアップすることです。

しかし、とにかくクエリ自体について質問していると思います。そのため、Hiveを使って玩具の例を作成しました(つまり、シェルを使用してHBaseテーブルを作成し、Hiveにcreate external tableを追加します)。

次に、Hiveコンテキストを使用してSQLコンテキストを作成します。

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

とHBaseのrowkeysのサブセットにアクセスするには:

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

フルおもちゃの表は3行あり、パフォーマンスのために

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のの1のために行く必要がありますあなたがそれを持っていれば(少なくともHortonworksのために)、クエリは同じでなければなりません。

関連する問題