Запись и чтение необработанных байтовых массивов в Spark-using Sequencefile файла последовательности

Как вы пишите RDD[Array[Byte]] в файл с помощью Apache Spark и прочитать его снова?

1 ответов


общие проблемы, похоже, получают странное не может привести исключение из BytesWritable для NullWritable. Другая распространенная проблема-BytesWritable getBytes - это совершенно бессмысленная куча ерунды, которая вообще не получает байтов. Что?!--1--> получает ваши байты, чем добавляет тонну нулей в конце! Вы должны использовать copyBytes

val rdd: RDD[Array[Byte]] = ???

// To write
rdd.map(bytesArray => (NullWritable.get(), new BytesWritable(bytesArray)))
  .saveAsSequenceFile("/output/path", codecOpt)

// To read
val rdd: RDD[Array[Byte]] = sc.sequenceFile[NullWritable, BytesWritable]("/input/path")
  .map(_._2.copyBytes())