Apache spark sql Spark中的惰性评估。Spark如何从DB加载数据

Apache spark sql Spark中的惰性评估。Spark如何从DB加载数据,apache-spark-sql,Apache Spark Sql,假设我们将限制设置为100,并且Spark应用程序连接到具有百万条记录的数据库。Spark是加载所有百万条记录还是加载100×100?Spark如何从数据库加载数据?它取决于数据库类型及其连接器实现。当然,对于分布式处理框架,分布式数据摄取始终是构建连接器的主要目标 举个简单的例子,如果表中有一(1 Mil)条记录,并且在加载()时将分区数定义为100,那么理想情况下,读取任务将分配给执行器,以便每个执行器读取一系列(10000)条记录,并将它们存储在内存中相应的分区中。看 在Spark UI中

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

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

举个简单的例子,如果表中有一(1 Mil)条记录,并且在加载()时将分区数定义为100,那么理想情况下,读取任务将分配给执行器,以便每个执行器读取一系列(10000)条记录,并将它们存储在内存中相应的分区中。看

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

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

更新

跨多个工作线程从JDBC连接读取数据

df = spark.read.jdbc(
   url=jdbcUrl, 
   table="employees", 
   column="emp_no", 
   lowerBound=1, 
   upperBound=100000,
   numPartitions=100
) 
display(df)
在上面的示例代码中,我们使用JDBC read在
emp_no
列上使用
partitionColumn
lowerBound
upperBound
numPartitionsparameters
将读取的表拆分为多个执行器