首页 > 解决方案 > 编写多个拼花架构单火花作业(按键/分区)?

问题描述

如何在单个作业中使用 Spark 写入依赖于密钥的多个输出,在 parquet 中并且您拥有具有多个模式的数据!

相关:按键写入多个输出 Scalding Hadoop,一个 MapReduce 作业 按键写入多个输出 Spark - 一个 Spark 作业

例如,假设我们有这样的东西。

val dataInSchema1A = Person(age = 10, name = "fred")
val dataInSchema1B = Person(age = 16, name = "bob")
val dataInSchema2A = City(cords = (2.3, 43.5, 33.3), population = 5000)

val schemaMapping: Map[Int, StructType] = Map(1 -> SchemaFor[Person], 2 -> SchemaFor[City])

sc.makeRDD(Seq((1, dataInSchema1A), (1, dataInSchema1B), (2, dataInSchema2A)))
.writeAsMultipleMultipleSchemas(prefix, schemaMapping)

将确保cat prefix/1镶木地板包含

Person(age = 10, name = "fred")
Person(age = 16, name = "bob")

并且cat prefix/2会是

City(cords = (2.3, 43.5, 33.3), population = 5000)

AFAIK 可能只有两种选择:

请参阅此https://stackoverflow.com/a/46118044/1586965的更简单版本的答案。

标签: scalaapache-spark

解决方案


推荐阅读