【发布时间】:2018-04-05 03:47:36
【问题描述】:
假设我从一个大表A 中选择给定的行。目标行由小索引表B 或列表C 给出。
A.join(broadcast(B), 'id').collect()
或
A.where(col('id').isin(C)).collect()
将创建一个任务,在过滤出目标行之前读取A 的所有数据。以广播连接为例,在任务 DAG 中,我们看到Scan parquet 过程确定了要读取的列,在这种情况下,这些列都是列。
问题是,由于A的每一行都很大,而且选择的行也很少,理想情况下最好:
- 只读入
A的id列; - 决定使用广播连接输出的行;
- 根据步骤 2 仅读取 选定 行以从
A输出。
有可能实现吗?
顺便说一句,要输出的行可能分散在 A 中,因此无法使用分区键。
【问题讨论】:
标签: python apache-spark join pyspark