Как сохранить как объектные файлы в разных каталогах в Spark? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть СДР ниже:

Array(
(0, "xx"),
(1, "xx"),
(2, "xx"),
(1, "yy")
)

Я хочу сохранить его в разных каталогах по ключу.Например, чтобы создать 3 файла в этих каталогах:

0/part-00000 // xx
1/part-00000 // xx and yy
2/part-00000 // xx

Через saveAsHadoopFile и MultipleTextOutputFormat, я могу сделать это в текстовом формате .Однако этот СДР содержит огромные сложные данные.Сохранение в сжатом формате может быть лучше, чем то, что делает saveAsObjectFile.

MultipleSequenceFileOutputFormat может помочь мне понять это, но как правильно его использовать?


РЕДАКТИРОВАТЬ:

Я пытался сделать это в текстовом формате:

.saveAsHadoopFile(outputPath, classOf[Any], classOf[Any], classOf[MultiOutputFormat])
  class MultiOutputFormat() extends MultipleTextOutputFormat[Any, Any] {

    override def generateActualKey(key: Any, value: Any): Any = {
      NullWritable.get()
    }

    override def generateFileNameForKeyValue(key: Any, value: Any, name: String): String = {
      key.asInstanceOf[Int] + "/" + super.generateFileNameForKeyValue(key, value, name)
    }
  }

1 Ответ

0 голосов
/ 20 февраля 2019

Какую версию spark вы используете?

Вы пробовали что-то вроде

.repartition(3).saveAsTextFile("/path/to/output", classOf[GzipCodec])

или

sc.hadoopConfiguration.setClass(FileOutputFormat.COMPRESS_CODEC, classOf[GzipCodec], classOf[CompressionCodec])

?

...