Spark(pyspark)速度测试

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

我通过jdbc连接到一个有500'000'000行和14列的DB。

这是使用的代码:

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

properties = {'jdbcurl': 'jdbc:db:XXXXXXXXX','user': 'XXXXXXXXX', 'password': 'XXXXXXXXX'}

data = spark.read.jdbc(properties['jdbcurl'], table='XXXXXXXXX', properties=properties)

data.show()

上面的代码用了9秒钟来显示数据库的前20行。

后来我创建了一个SQL临时视图

data[['XXX','YYY']].createOrReplaceTempView("ZZZ")

然后我运行了以下查询:

sqlContext.sql('SELECT AVG(XXX) FROM ZZZ').show()

上面的代码花了1355.79秒(大约23分钟)。这个可以吗?这似乎是一个很长的时间。

最后,我试着计算数据库的行数

sqlContext.sql('SELECT COUNT(*) FROM ZZZ').show()

花了2848.95秒(大约48分钟)。

我做错了还是这些金额是标准的?

apache-spark parallel-processing pyspark
1个回答
0
投票

当您使用此方法读取jdbc源时,您会失去并行性,这是spark的主要优势。请阅读official spark jdbc guidelines,特别是关于partitionColumnlowerBoundupperBoundnumPartitions。这将允许spark并行运行多个JDBC查询,从而产生分区数据帧。

调整fetchsize参数也可能对某些数据库有所帮助。

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