Чтение файла с несколькими заголовками разделов в Apache Spark с переменным содержимым разделов - PullRequest
0 голосов
/ 08 октября 2018

Можно ли использовать Spark API для чтения большого CSV-файла, содержащего несколько разделов с разными заголовками?Структура файла выглядит следующим образом:

BatchCode#1
Name,Surname,Address
AA1,BBB,CCC
AA2,BBB,CCC
AA3,BBB,CCC

BatchCode#2
Name,Surname,Address,Phone
XY1,BBB,CCC,DDD
XY2,BBB,CCC,DDD
XY3,BBB,CCC,DDD

При чтении записей мы должны быть осторожны с заголовками, так как форматы файлов могут быть разными в разных разделах.Информация BatchCode должна быть извлечена из заголовка и должна быть частью каждой записи в этом разделе - например, данные в строке 1 должны быть проанализированы как:

Name: AAA1
Surname: BBB
Address:CCC
BatchCode:1

Следующие опции приходят мне на умно я не совсем уверен, может ли это создать значительные проблемы:

  1. Чтение файла с использованием wholeTextFile.Это будет использовать один поток для чтения файла, но он загрузит весь файл в память и может вызвать проблемы с памятью для больших файлов.
  2. Вынуждение Spark прочитать файл в одном потоке, используя coalesce (1) наsc.textFile.Я не уверен, гарантирован ли заказ всегда.Как только мы получим файл как RDD, мы будем кэшировать строки заголовков при чтении файла и объединять их с соответствующими записями данных.

Даже если вышеуказанные подходы сработают, будут ли они эффективными?Что было бы наиболее эффективным способом?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

У меня работает следующая программа:

JavaPairRDD<String, PortableDataStream> binaryFiles = sc.binaryFiles(file);

PortableRecordReader reader = new PortableRecordReader();
JavaPairRDD<String, Record> fileAndLines = binaryFiles.flatMapValues(reader);

Где PortableRecordReader открывает DataInputStream и преобразует его в InputStreamReader, а затем использует анализатор CSV для преобразования строк в предполагаемый вывод в объекте Record, а также объединяетзаголовок

0 голосов
/ 08 октября 2018

Я написал программы только для Scala для более сложных таких случаев, когда гарантируется последовательность.В противном случае это слишком сложно.Файлы обрабатывались через csvkit, если исходили из xls или xlsx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...