#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. Но вы пишете систему, которая настолько критична ко времени, что этот шаг серьезно затруднит вашу работу? Я знаю, что использование несовершенных инструментов не очень приятно, но является ли это узким местом, которое вам нужно решить?