假设我的集群上有"100k条记录",数据库中有"1亿条记录"(例如:MySql(。
如何在不将整个 1 亿条记录物理移动到集群中的情况下,将这两个数据集之间的公共记录仅获取到"数据帧"或"RDD"中?
这些"1亿条记录"可能每天都在增加。因此,只是为了将其与"100k"的小数据集进行比较,我不想从数据库中移动整个大型数据集。
"mapPartitions"在这里有什么作用吗?
我建议遵循以下过程。
- 使用 spark jdbc 将 100k 条记录表导出到 RDBMS 临时表 使用 spark jdbc
- 导入数据,对于 spark jdbc 发送连接查询。
- 使用此适当的数据库引擎本身过滤数据,并仅发送公共记录。 但是,SQL Engines等数据源能够执行更多的预处理,例如评估聚合。这是有益的,因为它可以减少从源传输到 Spark 的数据量。现有接口不允许在源中进行此类处理。 https://issues.apache.org/jira/browse/SPARK-12449
- https://issues.apache.org/jira/browse/SPARK-20259