2017-09-12 6 views
-3

こんにちは、私は、Apacheの新しい学習者です。 これは正しい方法ですか? このコードは動作していますが、パフォーマンスは非常に低速です。どのループが各ループのデータにアクセスするのに最適なアプローチか分かりません。Apache-Spark-SQLを使用してデータベースにアクセス

Dataset<Row> javaRDD = sparkSession.read().jdbc(dataBase_url, "sample", properties); 

javaRDD.toDF().registerTempTable("sample"); 

Dataset<Row> Users = sparkSession.sql("SELECT DISTINCT FROM_USER FROM sample "); 

List<Row> members = Users.collectAsList(); 

for (Row row : members) { 

Dataset<Row> userConversation = sparkSession.sql("SELECT DESCRIPTION FROM sample WHERE FROM_USER ='"+ row.getDecimal(0) +"'"); 
userConversation.show(); 

} 
+0

ループの繰り返しごとにクエリを実行しています。それはいつも遅くなるでしょう。 – Kayaman

+0

thnx、スパークコードを使用してアクセスする他の方法はありますか?もちろん、 – saara

+0

。物事を行う唯一の方法が遅い方法と悪い方法であれば、それはあまり有用ではありません。 – Kayaman

答えて

0

あなたは一度だけのDB接続に必要なオーバーヘッドを支払うので、あなたが唯一のクエリを実行し、この方法は、すべてのユーザーとのセットを作成し、

sparkSession.sql("SELECT DESCRIPTION FROM sample WHERE FROM_USER IN usersSet); 

のようなクエリを実行してみます。

Spark over HDFSを実行し、これが1回限りのクエリである場合のもう1つの方法は、Sqoopのようなツールを使用してHadoopでSQLテーブルをロードし、Sparkでネイティブにデータを使用することです。

関連する問題