如何提高Spark的查询性能?

时间:2019-01-02 08:54:44

标签: scala apache-spark apache-spark-sql

我有一个连接4个表的查询,并使用查询下推将其读入数据框。

val df = spark.read.format("jdbc").
 option("url", "jdbc:mysql://ip/dbname").
 option("driver", "com.mysql.jdbc.Driver").
 option("user", "username").
 option("password", "password")
 .option("dbtable",s"($query) as temptable")
 .load()

各个表中的记录数分别为430、350、64、2354,加载时间为12.784秒,创建SparkSession的时间为2.119秒

然后我将结果数据计算为

 val count=df.count()
 println(s"count $count")

那么总执行时间为25.806秒,结果仅包含430条记录。

当我在sql工作台中尝试相同的操作时,只需几秒钟即可完全执行。 我也尝试在load()之后进行缓存,但是需要花费相同的时间。所以我怎么能比我更快地执行它。

2 个答案:

答案 0 :(得分:4)

您正在使用一种用于处理大数据的工具来解决玩具示例,因此您将获得所有开销,而没有任何好处

答案 1 :(得分:0)

尝试

之类的选项

partitionColumn

numPartitions

lowerBound

upperBound

这些选项将有助于提高Query的性能,因为它们将创建多个分区并且读取将并行发生