2017-11-29 4 views
0

本当に基本的な質問pyspark /ハイブ質問を追加?私の試行は以下ですPySpark/HIVE:私は既存のテーブルに追加するにはどうすればよい</p> <p>:既存のテーブルに

from pyspark import SparkContext, SparkConf 
from pyspark.sql import HiveContext 
conf_init = SparkConf().setAppName('pyspark2') 
sc = SparkContext(conf = conf_init) 
hive_cxt = HiveContext(sc) 

import pandas as pd 
df = pd.DataFrame({'a':[0,0], 'b':[0,0]}) 
sdf = hive_cxt.createDataFrame(df) 
sdf.write.mode('overwrite').saveAsTable('database.table') #this line works 

df = pd.DataFrame({'a':[1,1,1], 'b':[2,2,2]}) 
sdf = hive_cxt.createDataFrame(df) 
sdf.write.mode('append').saveAsTable('database.table') #this line does not work 
#sdf.write.insertInto('database.table',overwrite = False) #this line does not work 

ありがとう! サム

+0

'sdf.write.mode( 'append')'は、Hiveテーブルに追加する正しい方法です。 PySpark 2.2.0では、上記の例は期待通りに動作します。エラーメッセージが出ますか? – Jaco

+0

Hmm。私は同じバージョンを使用しています。私はエラーメッセージの長いリストを取得しますが、これは主なものだと思います: 'IllegalArgumentException: '指定するパスが1つしかないと予想されましたが、' –

+0

'というHive設定の問題のようです。書き込みに '.option(" path "、" hdfs:// .... ")'を追加すると動作しますか? – Jaco

答えて

0

オプション( '上書き')を使用していると問題が発生しているようです。テーブルを削除して新しいテーブルを作成します。次のようにすれば、すべて正常に動作します。

from pyspark import SparkContext, SparkConf 
from pyspark.sql import HiveContext 

conf_init = SparkConf().setAppName('pyspark2') 
sc = SparkContext(conf = conf_init) 
print(sc.version) 
hive_cxt = HiveContext(sc) 
hive_cxt.sql('USE database') 

query = """ 
     CREATE TABLE IF NOT EXISTS table (a int, b int) 
     STORED AS parquet 
     """ 
hive_cxt.sql(query) 

import pandas as pd 
df = pd.DataFrame({'a':[0,0], 'b':[0,0]}) 
sdf = hive_cxt.createDataFrame(df) 
sdf.write.mode('append').format('hive').saveAsTable('table') 

query = """ 
     SELECT * 
     FROM table 
     """ 
df = hive_cxt.sql(query) 
df = df.toPandas() 
print(df) # successfully pull the data in table 

df = pd.DataFrame({'a':[1,1,1], 'b':[2,2,2]}) 
sdf = hive_cxt.createDataFrame(df) 
sdf.write.mode('append').format('hive').saveAsTable('table') 
関連する問題