2017-04-25 5 views
0

Ich bin mit Funken csv einen Datenrahmen in CSV zu konvertieren, bevor ich in in eine Rotverschiebung Tabelle laden kann. Der Spark-CSV fügt einen Backslash hinzu, um den doppelten Anführungszeichen zu entgehen, was ich erwarten würde. Aber wenn der Kopierbefehl versucht, in eine Rotverschiebung zu laden, fügt er einen Backsplash zum Backsplash hinzu. Wie kann ich das verhindern?Rotverschiebung fügt Charakter entkommen

Hier ist ein Beispielcode:

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 Kopieren-Befehl: COPY xxxx FROM YYYY Trennzeichen '' FORMAT CSV

Es Fehler und die STL_LOAD_ERRORS Tabelle enthält diese:

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

Wie kann ich Rotverschiebung entweicht ein Escape-Zeichen zu verhindern?

+0

BTW, wahrscheinlich möchten Sie auch 'REMOVEQUOTES' verwenden, um die äußeren Anführungszeichen aus Ihren Textzeichenfolgen zu entfernen. –

+0

Guter Fang. Vielen Dank. –

Antwort

1

Versuchen einschließlich der ESCAPE Keyword in Ihrer COPY-Anweisung, z.B.

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

Das Hinzufügen von Escape gab eine Fehlermeldung, dass ESCAPE nicht mit CSV kompatibel ist. Ich habe das Format CSV entfernt und ging gut durch. Vielen Dank! –