Десериализация объекта файла последовательности Hadoop в памяти

#python #scala #hadoop #pyspark #sequencefile

#python #scala #hadoop #pyspark #sequencefile

Вопрос:

Pyspark имеет функцию SequenceFile, которая позволяет нам читать файл последовательности, который хранится в HDFS или по некоторому локальному пути, доступному для всех узлов.

Однако, что, если у меня уже есть объект bytes в памяти драйвера, который мне нужно десериализовать и записать в виде файла последовательности?

Например, приложение, над которым я работаю (я не могу изменить логику приложения), запускает задание spark, которое записывает этот файл в файловую систему, не совместимую с HDFS, которую я затем могу извлечь как объект байтов python в памяти, который, похоже, содержит только сериализованный объект последовательности, который я долженвозможность десериализации в памяти.

Поскольку этот объект уже находится в памяти (по причине, которую я не могу контролировать), единственный способ, которым я должен его десериализовать и фактически увидеть вывод (который представляет собой файл json), в настоящее время — записать его как файл локально, переместить этот файл в HDFS, затем прочитать файл с помощью sequenceFile метода (поскольку этометод работает только с файлом, который находится в пути к файлу HDFS или локальном пути на каждом узле) — это создает проблемы в рабочем процессе приложения.

Что мне нужно сделать, так это десериализовать это в памяти, чтобы я мог записать его в виде файла json без необходимости записи локально, а затем поместить его в HDFS только для того, чтобы прочитать его обратно с помощью spark

Есть ли в любом случае в python возможность взять эти байты как NullWritable Object и десериализовать его либо в словарь python, либо поместить его обратно в hadoop как нечто, что я действительно мог бы прочитать?

введите описание изображения здесь

Комментарии:

1. Вы имели в виду его в памяти драйвера или памяти исполнителя? Имеет ли это значение? Да, было бы более эффективно напрямую передавать в памяти в формат, с помощью которого вы можете записывать в hdfs. Но вы пишете систему, которая настолько критична ко времени, что этот шаг серьезно затруднит вашу работу? Я знаю, что использование несовершенных инструментов не очень приятно, но является ли это узким местом, которое вам нужно решить?

Ответ №1:

По сути, вам нужно будет изучить код файла последовательности самого spark, применить правильные фрагменты и преобразовать его в RDD, чтобы затем вы могли выполнять на нем такие действия, как запись в файл.

Вот ссылка, которая поможет вам начать, но для этого потребуется некоторое изучение.