2017-02-14 5 views
2

Append ModeのHive InternalテーブルにDFを挿入する正しい方法は何ですか。私たちは直接 "saveAsTable"メソッドを使用してDiveをHiveに書くか、DFをtempテーブルに保存してからクエリを使用することができます。Hive内部テーブルにSpark DataFrameを挿入するにはどうすればよいですか?

df.write().mode("append").saveAsTable("tableName") 

OR

df.registerTempTable("temptable") 
sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable") 

第2のアプローチは、レコードを追加したり、それを上書きしますか?

Hive InternalテーブルにDFを効果的に書き込む方法はありますか?

+0

どのように(型)がテーブルに格納され、どこに格納されるかによって異なります。 – FaigB

答えて

2

df.saveAsTable("tableName", "append")は推奨されていません。代わりに、2番目の方法が必要です。

sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable") 

テーブルが存在しない場合はテーブルを作成します。 2回目にコードを実行すると、既存のテーブルを削除する必要があります。それ以外の場合は、コードは例外で終了します。

別のアプローチでは、テーブルを削除したくない場合。 テーブルを個別に作成し、そのテーブルにデータを挿入します。

以下のコードは、

sqlContext.sql("insert into table mytable select * from temptable") 

既存のテーブルにデータを追加し、以下のコードは、この答えはスパーク1.6.2に基づいています

sqlContext.sql("insert overwrite table mytable select * from temptable") 

既存のテーブルにデータが上書きされます。他のバージョンのSparkを使用している場合は、適切なドキュメントを確認することをお勧めします。

+0

ありがとう、その正常に動作します。 – Shankar

5

答えが書かれて以来、私のために働いているオプションもおそらく償却されていません。

df.write.insertInto(target_db.target_table,overwrite = False) 

:(スパーク2.1用)の最新spark API docsによると、それは私がPython PySpark APIを使用していますが、それはScalaで同じになるDataFrameWriterクラスから

insertInto()方法を使用しています

上記は私のために働いた。

関連する問題