2017-12-22 10 views
0

以下は、RDBMSに接続してテンポラリテーブルを作成し、そのテンポラリテーブルでSQLクエリを実行し、SQLクエリ出力を.csvフォーマットに保存するために書いたコードですスルーdatabricksモジュール。私はコードを実行した後sparkで既存のHIVE物語にcsvファイルをロードする

HIVE.DBは、既存のHIVEデータベース HIVE.TBLある
from pyspark import SparkContext 
sc = SparkContext("local", "Simple App") 
from pyspark.sql import SQLContext, Row 
sqlContext = SQLContext(sc) 
from pyspark.sql import HiveContext 
sqlContext = HiveContext(sc) 

df = sqlContext.read.format("jdbc").option("url","jdbc:sqlserver://<server>:<port>").option("databaseName","xxx").option("driver","com.microsoft.sqlserver.jdbc.SQLServerDriver").option("dbtable","xxxx").option("user","xxxxx").option("password","xxxxx").load() 

df.registerTempTable("test") 

df1= sqlContext.sql("select * from test where xxx= 6") 
df1.write.format("com.databricks.spark.csv").save("/xxxx/xxx/ami_saidulu") 

df1.write.option("path", "/xxxx/xxx/ami_saidulu").saveAsTable("HIVE_DB.HIVE_TBL",format= 'csv',mode= 'Append') 

は、既存のHIVE表

ですが、私はエラーの下に取得しています:

py4j.protocol.Py4JJavaError: An error occurred while calling o68.saveAsTable. 
: java.lang.RuntimeException: Append mode is not supported by com.databricks.spark.csv.DefaultSource15 

がいることをいつまり、databricksモジュールは "saveAsTable"関数をサポートしていませんか?

「はい」の場合は、自分のコードの間違いを指摘してください。 いいえの場合、解決策/回避策/業界標準は何ですか?あなたのテーブルが管理されていると仮定すると、

スパーク1.6.1

+0

ハイブテーブルは外部で管理されていますか?間にcsvを書く理由はありますか?df.write.saveAsTable( 'HIVE_DB.HIVE_TBL'、write_mode = 'Append')だけではできませんか? – kutschkem

+0

その管理されたテーブル、そしてはい、私はあなたのポイントを得ました。今すぐコードを実行すると、「SLF4J:クラス "org.slf4j.impl.StaticLoggerBinder"をロードできませんでした。 SLF4J:ノーオペレーション(NOP)ロガーの実装にデフォルト設定する " – user3521180

+1

これはエラーですか、警告ですか?私は、コードはまだ動作するはずだと思うだろう、何もログに記録しないでください。 – kutschkem

答えて

1

私はもう一つの解決策を提案することができます。

挿入機能を使用してテーブルに挿入することができます。

sqlContext.sql("INSERT INTO/OVERWRITE TABLE HIVE_DB.HIVE_TBL select * from test where xxx= 6") 

私は、このソリューションがお手伝いします、あなたが直接、テーブルに書き込むことができますが、CSVファイルに書きたくない理由と、テーブルへの書き込みを望みますか?

テキスト区切りのファイルの場合でも、@tableパス。必要な区切り文字を使用して、表をTextFile表として定義します。あなたのファイル@tableパスは、挿入後に区切られたパスになります。

ありがとうございました

0

: ちょうどdf.write.saveAsTable( 'HIVE_DB.HIVE_TBL'、WRITE_MODE = 'APPEND')、中間csv-を通過する必要はありませんを行いますファイル。

このエラーは、csvのdatabricksモジュールが追加モードをサポートしていないことを意味します。 github hereに問題があります。そのため、解決策は、追加モードでcsvを使用することではありません。

関連する問題