4

ハイブ/インパラに2つのテーブルがあります。テーブルからデータをrddsとしてsparkにフェッチし、結合操作を実行したいと考えています。

ハイブ コンテキストで結合クエリを直接渡したくありません。これはほんの一例です。標準の HiveQL では不可能なユースケースが他にもあります。すべての行をフェッチし、列にアクセスして変換を実行するにはどうすればよいですか。

2 つの rdds があるとします。

val table1 =  hiveContext.hql("select * from tem1")

val table2 =  hiveContext.hql("select * from tem2")

「account_id」という列のrddsで結合を実行したい

理想的には、spark シェルを使用して rdds を使用して、このようなことをしたいと考えています。

select * from tem1 join tem2 on tem1.account_id=tem2.account_id; 
4

4 に答える 4

2

質問を理解できたかどうかはわかりませんが、代わりに API を使用して DataFrame に参加できるため、多くのことをプログラムで決定できます (たとえば、joinカスタム変換を適用するメソッドに関数をパラメーターとして渡すことができます)。

あなたの例では、次のようになります。

val table1 =  hiveContext.sql("select * from tem1")
val table2 =  hiveContext.sql("select * from tem2")
val common_attributes = Seq("account_id")
val joined = table1.join(table2, common_attributes)

DataFrame API で利用できる多くの一般的な変換があります: http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.DataFrame

乾杯

于 2016-05-03T20:30:10.147 に答える
1

したがって、table1 と table2 を一時テーブルとして登録し、これらの一時テーブルで結合を行うことができます。

table1.registerTempTable("t1")
table2.registerTempTable("t2")
table3 = hiveContext.hql("select * from t1 join t2 on t1.account_id=t2.account_id")
于 2014-11-06T22:35:09.023 に答える