如何将对象文件保存到spark中的不同目录?

mqkwyuun  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(467)

我有一个rdd如下:

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 ,我可以用文本格式。然而,这个rdd包含大量复杂的数据。以压缩格式保存可能更好,比如 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)
    }
  }
soat7uwm

soat7uwm1#

你用的是什么版本的spark?
你试过类似的东西吗

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

或者

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

?

相关问题