apache-spark - Spark Join 优化
问题描述
假设我有两个要使用“内部连接”连接的数据框:A 和 B,每个都有 100 列和数十亿行。
如果在我的用例中我只对 A 的 10 列和 B 的 4 列感兴趣,Spark 是否会为我进行优化以处理此问题并只打乱 14 列,还是他会打乱所有内容然后选择 14 列?
查询 1:
A_select = A.select("{10 columns}").as("A")
B_select = B.select("{4 columns}").as("B")
result = A_select.join(B_select, $"A.id"==$"B.id")
查询 2:
A.join(B, $"A.id"==$"B.id").select("{14 columns}")
Query1==Query2 在行为、执行时间、数据洗牌方面是否?
提前感谢您的回答:
解决方案
是的,spark 将为您处理优化。由于它的惰性评估行为,只会从数据框(A 和 B)中选择所需的属性。
您可以使用explain
功能查看逻辑/物理计划,
result.explain()
两个查询都将返回相同的物理计划。因此执行时间和数据混洗将是相同的。
参考 -解释功能的Pyspark 文档。
推荐阅读
- ios - 使用 Decodable 链接多个 JSON 请求 - Swift 5
- reactive-programming - 如果上游没有可用的元素,则重复 Flux 中的最后一个元素
- javascript - 如何在 React JSX 中调用 Web API?
- java - 如何通过 Onclicklistener 移动到 json 数组中的下一个 json 项
- c++ - 跨多个环境动态链接提升
- solr - Solr 部分搜索
- ruby-on-rails - ruby 在哈希数组中查找值
- amazon-redshift - 多个时间间隔内的值的代码策略
- android - ListView 项目的 Flutter Provider 模式
- json - JSONPath 格式返回值