2016-10-19 3 views
2

カフカトピックからハイブパーティションテーブルにデータストリームを格納しようとしています。私は、dstreamをデータフレームに変換し、ハイブコンテキストを作成しました。私のコードは、このスパークでデータフレームをハイブパーティションテーブルに格納

val hiveContext = new HiveContext(sc) 
hiveContext.setConf("hive.exec.dynamic.partition", "true") 
hiveContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict") 
newdf.registerTempTable("temp") //newdf is my dataframe 
newdf.write.mode(SaveMode.Append).format("osv").partitionBy("date").saveAsTable("mytablename") 

のように見えます。しかし、私は、クラスタ上でアプリケーションを展開するとき、私は通常のテーブルとして保存し、それを動作さhiveconfigurationsをコメントアウトしようとすると、そのは

Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: file:/tmp/spark-3f00838b-c5d9-4a9a-9818-11fbb0007076/scratch_hive_2016-10-18_23-18-33_118_769650074381029645-1, expected: hdfs:// 

を言います。しかし、パーティションテーブルと...それは私にこのエラーを与える。

また、一時テーブルとしてデータフレームを登録し、そのテーブルをパーティションテーブルに書き込むことも試みました。それも私に同じエラーを与えた

私はそれを解決する方法を教えてもらえますか?おかげさまで

答えて

0

をクラスタにデプロイする場合は、hadoop(hdfs)を設定する必要があります。

saveAsTableを使用すると、Sparkが保存するデフォルトの場所は(ドキュメントに基づいて)HiveMetastoreによって制御されます。別のオプションは、saveAsParquetFileを使用してパスを指定し、後でそのパスをハイブメタストアに登録するか、新しいDataFrameWriterインターフェイスを使用してパスオプションを指定することです。write.format(source).mode(mode).options(options).saveAsTable(tableName).

0

私はそれを理解しました。 spark appのコードでは、以下のようにスクラッチディレクトリの位置を宣言していました。

sqlContext.sql("SET hive.exec.scratchdir=<hdfs location>") 
関連する問題