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

时间:2016-05-18 16:34:14

标签: scala apache-spark dataset hdfs partitioning

假设我有某个案例类Dataset,例如

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

使用案例类的字段名称是否有直接的方法来执行此操作?

1 个答案:

答案 0 :(得分:1)

目前(Spark 1.4 +)

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

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

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