scala - 编写多个拼花架构单火花作业(按键/分区)?
问题描述
如何在单个作业中使用 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 可能只有两种选择:
- 使用一些库手动启动 Parquet 编写,然后使用 RDD/Spark 并行运行它们(注意,当也写入 s3 时,这个 get 很棘手,因为需要退避,你需要使用
mapPartitions
而不是使用map
s3 客户端可以在执行器内部构造)。 - 玩弄低级 Hadoop API(棘手),也许
MultipleTextOutputFormat
解决方案
推荐阅读
- oracle - Oracle APEX - 未来升级的义务?
- python - 求解线性不等式
- android - Firebase 电话身份验证检查是否触发了 reCAPTCHA 流
- connection-pooling - 需要将动态密码传递给 Hikari CP 的 PoolBase 类
- javascript - 在另一个 React 中渲染组件
- python - 控制台输出不同于 python 脚本输出
- sql - Oracle JSON_EQUAL 条件的 T-SQL 等效项是什么?
- javascript - 递归在 Python 中有效,但在 JavaScript 中无效
- javascript - Chrome 扩展:Linux 和 MacOS 上的清单无效,从商店安装
- vue.js - vue登录功能