Spark中的懒惰评估。 Spark如何从DB加载数据

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

如果假设我们设置了限制为100,并且Spark应用程序连接到具有百万条记录的数据库。那么Spark会加载所有百万条记录还是加载100比100?

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

Spark如何从DB加载数据?它取决于数据库类型及其连接器实现。当然,对于分布式处理框架,分布式数据摄取始终是构建连接器的主要目标。

作为一个简单的例子,如果我们在表中有一个(1 Mil)记录,并且我们在load()时将分区数定义为100,那么理想情况下,读取任务将分发给执行程序,以便每个执行程序读取一个范围(10,000)记录并将它们存储在内存中的相应分区中。见SQL Databases using JDBC.

在Spark UI中,您可以看到numPartitions指示了启动的任务数。每个任务都分布在执行程序中,这可以通过JDBC接口增加读写的并行性

Spark提供灵活的接口(Spark DataSource V2),允许我们构建自己的自定义数据源连接器。这里的主要设计关键是根据定义的分区数并行化读取操作。还要检查(figure 4)以了解分布式CSV提取在Spark中的工作原理。

更新

从多个worker的JDBC连接中读取

df = spark.read.jdbc(
   url=jdbcUrl, 
   table="employees", 
   column="emp_no", 
   lowerBound=1, 
   upperBound=100000,
   numPartitions=100
) 
display(df)

在上面的示例代码中,我们使用JDBC read来分析使用emp_nopartitionColumnlowerBoundupperBoundnumPartitionsparameters列上的执行程序读取的表。

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