Spark(pyspark)速度测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark(pyspark)速度测试相关的知识,希望对你有一定的参考价值。
我通过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分钟)。
我做错了还是这些金额是标准的?
答案
当您使用此方法读取jdbc源时,您会失去并行性,这是spark的主要优势。请阅读official spark jdbc guidelines,特别是关于partitionColumn
,lowerBound
,upperBound
和numPartitions
。这将允许spark并行运行多个JDBC查询,从而产生分区数据帧。
调整fetchsize
参数也可能对某些数据库有所帮助。
以上是关于Spark(pyspark)速度测试的主要内容,如果未能解决你的问题,请参考以下文章