Обработка массива [байт] в кадрах данных Spark

У меня есть фрейм данных df1, как показано ниже, со схемой:

scala> df1.printSchema
root
 |-- filecontent: binary (nullable = true)
 |-- filename: string (nullable = true)

У DF есть имя файла и его содержимое. Содержимое хранится в формате GZIP. Я мог бы использовать что-то вроде приведенного ниже, чтобы распаковать данные в файле и сохранить их в HDFS.

def decompressor(origRow: Row) = {
    val filename = origRow.getString(1)
    val filecontent = serialise(origRow.getString(0))

    val unzippedData = new GZIPInputStream(new ByteArrayInputStream(filecontent))

    val hadoop_fs = FileSystem.get(sc.hadoopConfiguration)
    val filenamePath = new Path(filename)

    val fos = hadoop_fs.create(filenamePath)

    org.apache.hadoop.io.IOUtils.copyBytes(unzippedData, fos, sc.hadoopConfiguration)
    fos.close()
  } 

Моя цель:

Поскольку данные столбца filecontent в df1 являются двоичными, то есть Array [byte], я не должен распространять данные и хранить их вместе и передавать их функции, чтобы она могла распаковать и сохранить их в файл.

Мой вопрос:

  1. Как мне не распределять данные (данные столбца)?
  2. Как убедиться, что обработка выполняется для одной строки за раз?

Если вы не хотите распространять или распараллеливать, не используйте Spark? Единственное, что вы действительно можете сделать, это собрать или преобразовать toLocalIterator.

zero323 25.04.2018 22:40

Распределение данных и параллельная обработка - основная тема Spark и Hadoop. Вы по-прежнему можете обрабатывать строку за строкой распределенным образом.

Ramesh Maharjan 26.04.2018 04:47

df1 является результатом очень длинного искрового кода MPP, и выполнение этой построчной операции является одним из многих шагов. Мне нужно ограничить это построчной операцией только для этого сценария.

K S Nidhin 26.04.2018 15:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
634
0

Другие вопросы по теме