Обработка массива [байт] в кадрах данных искры - PullRequest
0 голосов
/ 25 апреля 2018

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

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

У DF есть имя файла и его содержимое.Содержание GZIPped.Я мог бы использовать что-то вроде ниже, чтобы разархивировать данные в filecontent и сохранить их в 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 - это двоичный файл, т. е. массив [байт]. Я не должен распространять данные, собирать их вместе и передавать в функцию, чтобы они могли распаковать и сохранить их в файл.

Мой вопрос:

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