apache-spark - Spark 中的 coalesce + orderBy 是可交换的吗?
问题描述
我想运行以下代码:
df = df.coalesce(1).orderBy(["my_col"])
但它的执行显然会成为完成所有排序工作的单个任务的瓶颈。
我知道可以运行以下命令:
df = df.orderBy(["my_col"]).coalesce(1)
但是我不确定 Spark 是否会在分区折叠后保持排序。可以?
如果这样的话,第二个代码将是首选,因为排序将在分布式执行后合并结果,但我担心它可能无法正确保存。
如果它被保留,这将意味着两者是可交换的!
解决方案
通过使用很容易知道 Spark 会做什么explain
> df = spark.range(1,100)
> df.coalesce(1).orderBy('id').explain()
== Physical Plan ==
*(2) Sort [id#0L ASC NULLS FIRST], true, 0
+- Coalesce 1
+- *(1) Range (1, 100, step=1, splits=4)
所以答案是,它们不是可交换的。
推荐阅读
- python - 打印字典时,数据的中间部分丢失。-- df = pd.json_normalize(data['candles'])
- javascript - fs.mkdirSync() 在远程服务器文件夹中创建目录
- javascript - 如何使用 webdriverio 处理操作系统生成的弹出窗口
- android - DateTimeParseException - 无法在索引 15 处解析
- angular - 角度动画:首先淡出,然后淡入
- google-apps-script - Google Script - 如何在修改范围内的单元格时生成模板?
- sql-server - 从带有 ASP.NET 核心的 docker 容器连接到 SQL Server 容器时出现问题
- amazon-web-services - Istio - 在 AWS NLB 终止 TLS
- git - Git'请告诉我你是谁' - VSCode - 无法启动开发容器
- javascript - 映射对象数组但仅显示唯一值