2017-04-25 4 views
0

redshiftテーブルにロードする前にspark-csvを使用してデータフレームをCSVに変換しています。 spark-csvは二重引用符をエスケープするためにバックスラッシュを追加します。これは私が期待するものです。しかし、redshiftにロードしようとするときにcopyコマンドを実行すると、バックスプラッシュがバックスプラッシュに追加されます。どうすればそれを防ぐことができますか?ここでredshiftはエスケープ文字を追加します

はサンプルコードです:

df= sqlContext.createDataFrame([("1A", 123456, "first example"), ("1B", 123457, "It's a \"problem\"")], ['id', 'time', 'xstr']) 

+---+------+----------------+ 
| id| time|   xstr| 
+---+------+----------------+ 
| 1A|123456| first example| 
| 1B|123457|It's a "problem"| 
+---+------+----------------+ 

df.coalesce(1).write.format("com.databricks.spark.csv").option("header", "false")\ 
.option("quoteMode", "NON_NUMERIC")\ 
.save(fname) 

RSコマンドをコピーします:YYYY区切りFROM COPY xxxxは '' FORMAT CSV

このエラーアウトとSTL_LOAD_ERRORSテーブルはこれを含んでいます

1B,123457,"It's a \\"problem\\""  

エスケープ文字がエスケープされないようにするにはどうすればよいですか?

+0

ところで、おそらく、あなたのテキスト文字列から外側の引用符を取り除くために 'REMOVEQUOTES'を使いたいと思うかもしれません。 –

+0

良いキャッチ。ありがとうございました。 –

答えて

1

COPYステートメントにESCAPEというキーワードを含めるようにしてください。

COPY xxxx FROM YYYY 
delimiter ',' 
FORMAT CSV 
ESCAPE 
; 
+2

エスケープを追加すると、ESCAPEがCSVと互換性がないというエラーメッセージが表示されました。私はフォーマットCSVを削除し、うまくいった。ありがとう! –

関連する問題