Spark 自加入(层次结构)

问题描述 投票:0回答:1

假设我们有表“hier”(parent_id bigint,child_id bigint)

我需要构建的查询看起来像

Select * from hier h1
         join hier h2 on h1.parent_id = h2.child_id
         join hier h3 on h2.parent_id = h3.child_id
         join hier h4 on h3.parent_id = h4.child_id

深度始终相同,查询是静态的

有没有办法避免扫描他的表(对我来说相当大)四次?

我仅限于pyspark来实现

pyspark apache-spark-sql hierarchical
1个回答
0
投票

分层数据或递归查询是 pyspark 中具有挑战性的主题。通过仅选择两列,它对查询执行有很大帮助。我还建议以下几点:

  • 缓存层次:假设您将应用大量操作,并且有 4 次连接。

  • 第三次和第四次连接之前的检查点:将数据读/写到临时位置,您可以减少执行计划。

  • 将 CTE(公用表表达式)与 Spark SQL 结合使用。这比使用数据帧 API 进行递归查询更有效。

© www.soinside.com 2019 - 2024. All rights reserved.