Количество строк увеличивается и данные искажаются в результате CSV - PullRequest
0 голосов
/ 29 мая 2020

Преобразование фрейма данных из одной формы в другую:

Parquet -> Parquet (number of rows remains same, NO PROBLEM)
Parquet -> CSV     (number of rows INCREASES! Data corruption!)

Сначала считайте данные из паркета, затем преобразуйте их в CSV / Parquet, используя команду ниже:

<input_dataframe>.coalesce(1).write.option("header", true).csv/parquet(output_path)

scala> spark.read.option("header", true).parquet(input_path).count
Long = 8387913

scala> spark.read.option("header", true).csv(output_path).count
Long = 8387932

В результате этого строки смешиваются друг с другом, и записи переливаются или повреждаются.

Есть обходной путь ТОЛЬКО в том случае, если вам нужно прочитать csv с помощью spark . Вы можете передать опцию multiline как true.

scala> spark.read.option("header", true).option("multiline", true).csv(output_path).count
Long = 8387913     <<  input parquet contains same number of records 

Но это не то, что я хочу делать с CSV. Мне нужно прочитать без искры.

Как сохранить структуру нетронутой при записи фрейма данных в csv ?

ПРИМЕЧАНИЕ. Это может быть не воспроизводимым случаем для всех фреймов данных. В моих данных он есть по неизвестным причинам. Я заметил эту проблему, когда обнаружил, что поле строкового типа хранит целое значение в результирующем CSV, и весь набор записей поврежден произвольными значениями. Размер CSV ~ 2,5 ГБ.

...