并行运行 SparkSQL 阶段作业

Posted

技术标签:

【中文标题】并行运行 SparkSQL 阶段作业【英文标题】:Run SparkSQL stage jobs in parallel 【发布时间】:2016-10-06 14:24:25 【问题描述】:

我正在加载一个文本文件:

val adReqRDD = sc.textFile("/Users/itru/Desktop/vastrack_sample_old.rtf")

我将数据存储为临时表

adReqRDD.registerTempTable("adreqdata")

我需要查询上表

val alladreq = sqlContext.sql("select DeviceId,count(EventType) as AllAdreqCount from adreqdata where EventType = 1 and Network = 0 group by DeviceId ")

val adreqPerDeviceid = sqlContext.sql("select DeviceId,count(EventType) as AdreqCount from adreqdata where EventType = 1 and Network = 0 and PlacementId <> '-' and BundleID <> '-' and DeviceId <> '-' and IPAddress <> '-' group by DeviceId ")

val adreqPerDeviceidtoSpotx = sqlContext.sql("select DeviceId,count(EventType) as AdreqCountToSpotx from adreqdata where EventType = 1 and Network = 9 and PlacementId <> '-' and BundleID <> '-' and DeviceId <> '-' and IPAddress <> '-' group by DeviceId ")

一旦我的工作开始,所有 3 个活动阶段都按顺序运行,我怎样才能让它们并行运行。

【问题讨论】:

【参考方案1】:

您可以使用期货来并行启动火花动作。像这样的东西。

val queries = Seq(
  "query1",
  "query2",
  "query3"
)

val results = Future.traverse(queries)(q => Future(
  val queryResult = sqlContext.sql(q)
  queryResult.write.format...
))

Await.result(result, Duration.Inf)

【讨论】:

在此之后如何将每个查询结果写入文件 添加了一个编辑。查看有关如何写入文件的 spark 文档。 spark.apache.org/docs/latest/…

以上是关于并行运行 SparkSQL 阶段作业的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GITLAB 功能标志在 CI yml 文件中按顺序运行同一阶段的作业

SparkSQL-数据的加载和保存

Spark Sql 作业优化

Spark[四]——Spark并行度

定制Spark SQL: 一种轻量级实现方案

Spark性能调优之合理设置并行度