2016-11-30 12 views
0

このように予測結果DataFrameをOracleデータベースに書き戻したいとします。 model.transform(testDate).write.mode(SaveMode.Overwrite).jdbc(url、 "b_spark_tst" 、小道具)Spark write DataFrame out jdbcエラー

が、私は、このエラーメッセージが表示されます:

Exception in thread "main" java.lang.IllegalArgumentException: Can't get JDBC type for array<string> 

誰もがデータベースにデータフレームを書き出す方法を私を助けることができますか?

ありがとうございました!

アップデート:私は同じ問題を抱えていたし、それはあなたが言葉のフィールド内の要素フィールドを保存しようとしている方法に関連している

root 
|-- CATEG: string (nullable = true) 
|-- COMM: string (nullable = true) 
|-- label: double (nullable = true) 
|-- words: array (nullable = true) 
| |-- element: string (containsNull = true) 
|-- features: vector (nullable = true) 
|-- rawPrediction: vector (nullable = true) 
|-- probability: vector (nullable = true) 
|-- prediction: double (nullable = true) 
+0

テーブルをどのように定義して上書きすることができますか?そして、データフレームのスキーマ構造はどのように見えますか? – FaigB

+0

がスキーマ構造で更新されました。私は言葉の列が問題になると思います。私はまだデータベースにテーブルを作成していない..私は? :) – solarenqu

+0

私のコードを変更した場合:model.transform(testDate).select( "CATEG"、 "COMM"、 "ラベル"、 "fatures"、 "rawPrediction"、 "確率"、 "予測")。write.mode (SaveMode.Append).jdbc(url、 "b_spark_tst"、prop)ラベル例外は見られません。:( – solarenqu

答えて

0

これは私のデータフレームのスキーマがどのように見えるかですアレイ。 1つの解決策は、その配列をStringとして保存することです。私が持っている私の場合は

:私はpysparkを使用してやっている何を

|-- jurisdiction_names: array (nullable = true) 
| |-- element: string (containsNull = true) 

newDataFrame = completeDataFrame.select("jurisdiction_names") 

であると私はあなたが操作することができ、新たなデータフレームで

+--------------------+ 
| jurisdiction_names| 
+--------------------+ 
|    [Paris]| 
|   [Amsterdam]| 
|  [Santa Monica]| 
|[DISTRICT OF COLU...| 
|    [Paris]| 
|[Illinois State, ...| 
+--------------------+ 

を取得しています情報を簡単に。