使用数据集 API 在 Spark 中按键分区输出

Partition output by key in Spark using Datasets API

假设我有一个 Dataset 的某种情况 class,例如

case class Foo(colour: String, count: Int)

val ds: Dataset[Foo] = sqlContext.createDataset(Seq(
  Foo("red", 10), 
  Foo("red", 22),
  Foo("blue", 12)
))

如何将其保存到由其中一个字段分区的文件系统中,例如 foo 因此输出目录将是:

/my-path/foo=red/
/my-path/foo=blue/

内容如下

> cat /my-path/foo=red/*
10
22

> cat /my-path/foo=blue/*
12

有没有一种直接的方法可以使用案例的字段名称来做到这一点 class?

当前(Spark 1.4+)

ds.toDF().write.partitionBy("foo").text("/my-path")

从 Spark 2.0 开始,toDF() 可能会变得多余,因为 API 将被合并。

对于其他格式,只需将 text 更改为 jsonparquet