Apache Spark:如何仅将公共记录从数据库提取到集群



假设我的集群上有"100k条记录",数据库中有"1亿条记录"(例如:MySql(。

如何在不将整个 1 亿条记录物理移动到集群中的情况下,将这两个数据集之间的公共记录仅获取到"数据帧"或"RDD"中?

这些"1亿条记录"可能每天都在增加。因此,只是为了将其与"100k"的小数据集进行比较,我不想从数据库中移动整个大型数据集。

"mapPartitions"在这里有什么作用吗?

我建议遵循以下过程。

  1. 使用 spark jdbc 将 100k 条记录表导出到 RDBMS 临时表
  2. 使用 spark jdbc
  3. 导入数据,对于 spark jdbc 发送连接查询。
    • 使用此适当的数据库引擎本身过滤数据,并仅发送公共记录。 但是,SQL Engines等数据源能够执行更多的预处理,例如评估聚合。这是有益的,因为它可以减少从源传输到 Spark 的数据量。现有接口不允许在源中进行此类处理。 https://issues.apache.org/jira/browse/SPARK-12449
    • https://issues.apache.org/jira/browse/SPARK-20259

最新更新