Apache Spark使SQL查询更快?

时间:2017-06-09 13:40:29

标签: java apache-spark apache-spark-sql

来自apache-spark-makes-slow-mysql-queries-10x-faster

  

对于长时间运行(即报告或BI)查询,它可能很多   更快,因为Spark是一个大规模并行系统。 MySQL只能使用一个   每个查询的CPU核心,而Spark可以使用所有集群上的所有核心   节点。在下面的示例中,MySQL查询在Spark中执行   并且运行速度快5-10倍(在相同的MySQL数据之上)。

它看起来很棒,但我无法思考查询的实际示例,其中查询可以在子查询中划分,而多个核心van使它更快 在一个核心上运行它?

1 个答案:

答案 0 :(得分:1)

假设我们有两个表Customers和Orders,每个表有1亿条记录。

现在我们必须在Customer和Order表中的customer_id列上连接这两个表来生成报告,因为单个系统必须在一个系统上执行此连接,所以它几乎不可能。大量数据。

在Spark Cluster上,我们可以根据连接列对这些表进行重新分区。现在通过散列customer_id来分发两个数据帧的数据。所以这意味着订单和客户表都包含spark的同一个工作节点中的单个客户的所有数据,并且可以执行本地连接,如下面的片段所示。

val customerDf = //
val orderDf = //
val df1 = customerDf.repartition($"customer_id")
val df2 = orderDf.repartition($"customer_id")
val result df1.join(df2).on(df1("customer_id") == df2("customer_id")) 

因此,这个1亿条记录连接现在在数十个或数百个工作节点上并行执行,而不是像MySQL那样在单个节点中完成。