2017-05-31 1 views
0

私はScalaを使用してSparkのデータフレームからデータをロードして処理したいと考えています。 生のSQLステートメントは、次のようになりますデータフレームからデータを選択して処理する最も効率的な方法

私がこれまで何をやったか
INSERT INTO TABLE_1 
(
    key_attribute, 
    attribute_1, 
    attribute_2 
) 
SELECT 
    MIN(TABLE_2.key_attribute), 
    CURRENT_TIMESTAMP as attribute_1, 
    'Some_String' as attribute_2 
FROM TABLE_2 
    LEFT OUTER JOIN TABLE_1 
    ON TABLE_2.key_attribute = TABLE_1.key_attribute 
WHERE 
    TABLE_1.key_attribute IS NULL 
    AND TABLE_2.key_attribute IS NOT NULL 
GROUP BY 
    attribute_1, 
    attribute_2, 
    TABLE_2.key_attribute 

: は、私は、SELECT文からのデータフレームを作成し、TABLE_2データフレームでそれに参加しました。

val table_1 = spark.sql("Select key_attribute, current_timestamp() as attribute_1, 'Some_String' as attribute_2").toDF(); 
table_2.join(table_1, Seq("key_attribute"), "left_outer"); 

そうでもない多くの進歩私は多くの困難に直面しているので:

  1. 私は効率的に処理データをSELECTの処理方法を教えてください。別々のDataFramesにすべてを保存しますか?
  2. WHERE/GROUP BY句をいくつかのソースの属性とともに挿入するにはどうすればよいですか?
  3. Spark SQL以外の方法はありますか?取り扱い中
+0

Spark SQLは、特にSpark 2を使用して、効率的な方法で最適化を実行し、高価な操作を実行することができます。データソースをテーブルとして登録し、元のクエリを変更せずにSpark SQL上で実行しようとしましたか? – stefanobaghino

+0

Spark DataFrameをハイブテーブルに変換し、spark sqlを使用してテーブルをクエリしますか? –

答えて

0

いくつかの手順を実行している -

  1. まず一時テーブルとして保存し、あなたの生データ

  2. でデータフレームを作成します。

  3. あなたは、フィルタ()または「条件sparksqlで」を使用して、あなたが使用されるように続いて 結果のデータフレーム

  4. を得ることができます - あなたはdatframesでジョンを利用することができます。 dafaframesを表の表記として考えることができます。

効率に関しては、処理が並行して行われるので注意が必要です。効率性に関してもっと必要なものがあれば、それに言及してください。

関連する問題