Spark(pyspark)速度测试

时间:2018-03-05 10:25:15

标签: apache-spark parallel-processing pyspark

我通过jdbc连接到一个包含500&#39,000' 000行和14列的数据库。

以下是使用的代码:

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分钟)。这个可以吗?这似乎是一个很长的时间。

最后我试着计算DB的行数

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

2848.95秒(约48分钟)。

我做错了什么或这些金额是标准的吗?

1 个答案:

答案 0 :(得分:0)

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

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