使用数据集 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
更改为 json
或 parquet
假设我有一个 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
更改为 json
或 parquet