如何将对象文件另存为Spark中的其他目录?

时间:2019-02-20 08:53:42

标签: scala apache-spark rdd

我在下面有一个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

通过saveAsHadoopFileMultipleTextOutputFormat,我可以以文本格式进行操作。但是,此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)
    }
  }

1 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的Spark?

您尝试过类似的事情

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

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