Ошибка при чтении очень больших файлов с пакетом spark csv

Мы пытаемся прочитать файл размером 3 ГБ, который имеет несколько символов новой строки в одном столбце, используя синтаксический анализатор spark-csv и univocity 1.5.0, но файл разбивается на несколько столбцов в некоторой строке на основе символа новой строки. Этот сценарий возникает в случае большого файла.

Мы используем spark 1.6.1 и scala 2.10.

Следующий код, который я использую для чтения файла:

sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true") 
    .option("inferSchema", "true")
    .option("mode","FAILFAST")
    .option("escape","\"")
    .option("qoute"."\"")
    .option("parserLib","univocity")
    .load("abc.csv")

java.lang.exception: FAILFAST на 20.01.2015.

Пример файла: "A AAAAAAAA", "AA999", "AA999", "AA999", "9999-99-99-99.99.99.999999", "AAAAAA99", "Aaaaa Aaaaaaaa

99/99/9999 - ААА Ааааааа Аа: ааааааааа аа А ааааа, ааааааааа ааа аааааааааааааааааа

Ааа ааааа аа ААА аааааааааааааааа

99/99/9999 Ааааа аааааа - аа ааааааааа ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа.

99/99/9999 Ааа'а аааааа а/ ааа ааааааа - ААА аааааааааа ааа'а ааааааа

99/99/9999 ААА аааааа - ааааааа аааааааааа

99/99/9999 ААА ааааааа. Ааа аааа аа. Aaaaaa Aa: aaaaaaaaa aaaaaaaa aaaaaa, A aaaaaaa aaaa aaaaaaaaaa, aaaaa aaaaaaa aaaa aaaaaaaaaa (aaaa aaaaaaaaaaaa aaaaaaa). A&Aa aaaaaa aa aaaaaaaaaa aaa aaaa aaaaaa aaaa aaaaa aa aaaaaaaaaa, A aaaaaaaa aaaaa aaa aaaaa aaaaaaaaa aaaaa aaaa aaaaa aaaaa aaaaa aa aaaaaaaaaa. Ааааааааааааааааааааааааааааааааа.

99/99/9999 - ааааааааааааа.

99/99/9999 — ААА

99/99/9999 AAA aaaaaa aaaaa aa Aaa 9999 aaaa aaaaaaaaaa aaaaaaaaaaa - aa A&Aa. Ааааааааааааааааааааа.

99/99/9999 ААА ааааа аааааа - аа ааааааа аа ааааа аааааа аа ААА аа ААА ааа аа аааааа аааааа аааа-аааааааааааа. Ааааааааааааааааааааааааааааааааааааааааааааа.

99/99/9999 - Аааааааааааааааа. Ааааааа аааа аааа 99/99/9999 - 99/99/9999

99/99/9999 - аааааа ааааааа аа AAAA аа: AAAA ааааа аааа аааааа аааа аааа ааааа аа ааа ааааааааа.

99/99/9999 Аааааа а/ ааа ааааааа. Аааааааааааааааааааааааааааааааааааа.

99/99/9999 Аааааа аааааа аааааа аааа.

99/99/9999 Ааааааааааааааааааааааааааа

99/99/9999 Аааааа а/ ааа ааааааа ааа'а ааааааааа аааааааааааааааааааа

99/99/9999 ААА аааааа А&Аа аааааа ааа ааааааааааааааа ааа ааааа аааааа

99/99/9999 ААА ааааа аааааа - ааааа ааааааааааааааааа ааа аааааааааааааа ааааааааааааа. Aaa aaaaaa aaaaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaa aaa aaaa aaaaaa aa aaaaaa aaaaaa aaaaa aaaa aa aaaaaa aaa aaaaaaaa aaaaaaaaa aaaaaaaaaa aaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaa

99/99/9999 AAA aaaaaa aaaaaaa aaaaaaa aaaa aaaaaa aa Aaa 9. A&Aa aaaaaa aa aaaaa aaaaa aaaa aaaaaaaaa, aaaaaaaaaaaaaa aaaaaaaaa aaa aaaa aaaaa aaaaaaaaa aaaaaaaa aaaaaaaa.

99/99/9999 ААА - аааааааааааааааааааааа.

AAA aaaaaaaaa aaaaaaaaaa aaaaaaa aaaa aaaaaaaaaaaa aaaaa aa aaaa aaaaaa aa aaaaaaa aa aaaaa aaaaaaaaa aaaaa aa aaaaaaaaaaa aa aaaa.

99/99/9999 ААА ааааа аааааа - Ааааааааааааааааааа аа Aaa aaaaaaaaaaaa aaaa aa 99/99/9999 aaa aaa aaaaaaaaaaa aaaaaaaaaaaaa aaaaa 99/99/9999 aaaa aaa aaaaaaa aa aaaaaaaaa aaaaaaaa, aaaaaa AAA aa aaaaa aaaaaaaaa aa aa 99. Aa aaa aaaaaaa aa aaaaaaaaa aaaaaaaa, aaa aaaaaaaaaa aaaaaaaa aaaaa aaaa aaaaaaaaaaa aaaa aaaa ааааааааааааааааааааааааааааа.

99/99/9999 AAA aaaa aaaaa - AAA aaaaaaa aaaa A&Aa aaaaaaaaaaa aa aaa aaaaaaaaaaaa aaaaa aaaa aaaa aaaaaaaa aa Aaaaa 9999.

Ааааааааа аааааа аа ааааа аа аа ааа 9, 9999 ааа ааааааа аааааааа ааааа ааа аааааааа аааа Аа. Аааааааа ааа аааа аааааа аа ааааааа аааааа аа А&Аа ааа аааааааа аааааа аааа аааа. Аааа аа ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа.

99/99/9999 Ааааааааааааааааа АА

99/99/9999 - а/а аааа ааааааааааааааа

99/99/9999 Аааааааааааааааааааааааааааааа

99/99/9999 - aaaa aaaaaa aa aaaaaaaaaaaa aaaaaaaa aaa aaa aaaaaaaaaa 99/99/9999 - aaa aaaa aa aaaaaaaaaaaa aaaaaa aaa aaaaaaaaaaaa aaaa aaaa aaaaa aaaa aaaa aaa Aaa 99, 9999 aaaaa aaa aaa aaaaaaaaaa

99/99/9999 - аааа ааа'а аааа аааааааааааа ааааааааа аа аааа аааа ааааааа аааааааааааа Аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа. ааа аааа ааа аааа ааааа ааааа аааааааа ааа аааа аааа ааа аааа ааааааааааа. Аааа ааа аа ааааа а/а ааааа ааааа. Ааааааааааааааааааааааааааааа.

99/99/9999 - Аааааааааааааааааааааааа. Aaaaaaaaa aaaa aaaa aaaaa aaaaaaa aaaaaaaa aaa Aaaaa Aaaaaaaaaa Aaaaaaaa, aaaaaaa, aaaaa aa a aaa aa aaaa aaaa aaaaaaa aa aaaaaaaa aa aaaaaaa, aaaa aaaaa, aaa aaaaaa, aaaa aa aaaaaaaa, aaaa aa aaaaaaaaaa, aaaaaaa aaaaa aaaaaa. Ааааа ааа ааааа аааа аааааааа аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа (аааааааааааааааааааааааааа 9999). Аааа аааааааааааааааааааааааааааааа. Aaa aaaaaaaa aaa aaaaaaaaaa aa a aaaaaaaaaa aa aaaaaaaa aaaaaaaa, aaaaaa aaaaa aa aaa aaaaaa aaaaaaaaaaa aaaaa aaa aaaaaaaa aa aaa aaaaaaaa aaaaa aa Aaa 9999 aa aaa aaaaaaa aa aaaaaaa aa aaaaaaa aaaaaaaa. Аа Ааа 9999, Аа. Аааааааааааааааааааааааааааааааааааааааааааа,аааааааааааааааааааааааааааааааааааааааааааааааа. Аа аа ааааа аа аа. Ааааааааааааааааааааааааааааааааааааааааааа. Aaa A/Aa aaa aaaaa aaaaa Aaa 9999 aaaaa aaaa aaaaaaaa aaaaaaaa aaaa aa aaaaaaaaaa, aaaa aa aaaaaaaaaaaaaa aaa aaaaaaaaaa, aaaaaaa, aaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaa, aaaa, aaaa Aaaaaaaaa: Aaaaa aaa aaaaaaaa aa aaaaaaa aa aaaa aaaaa, aaaaaaa aaaa aaa aa-aaaaaa aaaaaaa aaaaaaaaa aaa aaaa aa aaaa aaaaaaaa aa aaaaa aaaaaaaaa aaaaaaa aa aaaa-aaaaaaaaaa aaaaaaaaaa, aaa aaaaaaaaa aaaaaaa aaaa. "


person Rajat Mishra    schedule 17.12.2016    source источник
comment
в чем ошибка, можете ли вы вставить сюда полный стек?   -  person Ram Ghadiyaram    schedule 17.12.2016
comment
java.lang.exception: FAILFAST на 20.01.2015.   -  person Rajat Mishra    schedule 17.12.2016
comment
Я не очень понимаю вопрос. Проблема, похоже, связана не с размером CSV-файла, а с какой-то поврежденной записью, присутствующей в большем файле.   -  person maasg    schedule 17.12.2016
comment
@maasg Я перепроверил эту запись, в которой она выдавала ошибку. Это правильно. На самом деле, когда я запускал эту запись в файле меньшего размера, она работала правильно. Поэтому у меня были сомнения, есть ли какие-либо ограничения на размер каждого столбца.   -  person Rajat Mishra    schedule 17.12.2016


Ответы (1)


Отношение Spark CSV основано на его TextBasedFileFormat и просматривает ввод только построчно, поэтому он не поддерживает многострочные записи. Если вам нужно поддерживать многострочные записи, вы можете вместо этого использовать wholeTextFiles и вручную анализировать ввод (но в идеале это должно выполняться как задание по очистке данных перед обработкой).

person Holden    schedule 18.12.2016
comment
Поскольку в нашей логике нам нужно применить множество преобразований и загрузить данные в таблицу кустов, поэтому мы пытались использовать фреймворк данных. Я смог загрузить файл, изменив mapreduce.input.fileinputformat.split.minsize в mapred-site.xml. - person Rajat Mishra; 20.12.2016
comment
Итак, каков ваш новый путь загрузки? - person Holden; 20.12.2016
comment
Я пытался изменить mapreduce.input.fileinputformat.split.minsize во время программы в hiveContext.setConf, но не работает. Можно ли изменить свойство в самой программе для такого файла, а не менять его глобально. - person Rajat Mishra; 20.12.2016
comment
не удалось загрузить путь? Я не делал никаких изменений в коде. Только что изменил mapreduce.input.fileinputformat.split.minsize в mapred-site.xml, но может делать это каждый раз. Нужно найти способ изменить его локально, чтобы он не влиял на другие задания. - person Rajat Mishra; 20.12.2016
comment
Интересно, значит, вы увеличиваете размер minSplit глобально, а потом он проходит? У вас есть образец одной многострочной записи, которая сейчас работает (потому что, глядя на код в текущей версии, это Spark, я не уверен, как это решит проблему) - person Holden; 20.12.2016
comment
@ Я привел пример записи выше, в последнем столбце есть несколько символов новой строки (более 20 новых строк), и я не могу поделиться полной записью, поскольку она содержит конфиденциальную информацию. Изменяя размер minSplit, я запускаю его в один раздел, где я заменяю все символы новой строки, но после этого я выполняю процесс маскирования, который также будет выполняться в одном разделе, если параметры изменяются глобально, чего мы хотим избежать. так как это сильно повлияет на производительность. - person Rajat Mishra; 20.12.2016
comment
Правильно, это был мой вопрос о пути загрузки, вы изменили свой код, чтобы вручную отключить новые строки. Вы можете сделать то же самое с целыми текстовыми файлами, как это было предложено в моем ответе, но это не разбивается на файлы. Основываясь на том, как функционируют форматы ввода текста, нет простого способа обойти это - если вы не измените разделитель записей на что-то, что в противном случае не отображается, или разделите ввод на несколько файлов, вы столкнетесь с этой проблемой. Вы, конечно, можете исправить ситуацию после того, как очистите свои входные данные, и это поможет. - person Holden; 20.12.2016
comment
Есть ли способ изменить mapreduce.input.fileinputformat.split.minsize в самом коде, а не глобально. В кластерном режиме я могу это сделать, передав файл mapred-site.xml в spark-submit, но в клиентском режиме я не добился успеха. - person Rajat Mishra; 20.12.2016