Reading csv files with quoted fields containing embedded commas

前端 未结 3 1573
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-05 02:43

I am reading a csv file in Pyspark as follows:

df_raw=spark.read.option(\"header\",\"true\").csv(csv_path)

However, the data file has quote

3条回答
  •  囚心锁ツ
    2020-12-05 03:17

    I noticed that your problematic line has escaping that uses double quotes themselves:

    "32 XIY ""W"" JK, RE LK"

    which should be interpreter just as

    32 XIY "W" JK, RE LK

    As described in RFC-4180, page 2 -

    1. If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double quote

    That's what Excel does, for example, by default.

    Although in Spark (as of Spark 2.1), escaping is done by default through non-RFC way, using backslah (\). To fix this you have to explicitly tell Spark to use doublequote to use for as an escape character:

    .option("quote", "\"")
    .option("escape", "\"")
    

    This may explain that a comma character wasn't interpreted as it was inside a quoted column.

    Options for Spark csv format are not documented well on Apache Spark site, but here's a bit older documentation which I still find useful quite often:

    https://github.com/databricks/spark-csv

    Update Aug 2018: Spark 3.0 might change this behavior to be RFC-compliant. See SPARK-22236 for details.

提交回复
热议问题