【问题标题】:How spark sql queries turn into a number of stagesspark sql 查询如何变成多个阶段
【发布时间】:2020-07-12 05:13:19
【问题描述】:

我有一个简单的 spark-submit 工作:

  • 读取 CSV 文件
  • 执行 SQL 聚合和排序
  • 显示聚合
  • 将结果存储到镶木地板

我将随机分区保持在 4 个,并且可以看到总共创建了 7 个阶段(4 个用于保存镶木地板,2 个用于显示操作,1 个用于我猜是读取文件,不确定)。

我有几个问题在这里

  1. 为什么拼花存储有 4 个阶段,不超过或少于与节目中其他阶段类似的东西?

  2. 为什么 Spark SQL 查询在后台启动阶段?

代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import lit
from pyspark.context import SparkContext
sc = SparkContext.getOrCreate()
spark = SparkSession(sc)
spark.conf.set("spark.sql.shuffle.partitions",4)
df = spark.read.csv('/raj/data/test.csv', header=True)
df.createOrReplaceTempView("visitors")
sqldf=spark.sql("select NAMELAST,NAMEFIRST,NAMEMID,count(*) as frequency  from visitors group by NAMELAST,NAMEFIRST,NAMEMID  order by count(*) desc ")
sqldf.show()
sqldf.write.mode("overwrite").parquet("/tmp/data/key=1")

【问题讨论】:

  • 我没听懂你? @thebluephantom
  • 主配置是什么?只是在 linux 虚拟机或集群上?我假设环境很小
  • 是的,一台具有 16gb 内存和 4 个内核的机器,在主从独立架构上运行 Spark,在 dockers @thebluephantom 中运行
  • 好的,很清楚,但是您提交给 spark 独立版?
  • 其实无所谓

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

一般情况

  • 从 Spark UI 等读取生成的输出并不是一件容易的事。我习惯于从 ORACLE 等进行解释。(虽然与 DAG 可视化不太一样。)
  • 使用 DF 与 RDD 不同;网络上 Stages 上的很多内容都与那个时代有关,但 Catalyst 和 DF 的工作方式略有不同,人们经常说不用担心。
  • 有时说show 可以搞砸催化剂优化器。不确定是否真的如此。
  • 每个版本的 DAG 可视化都会发生变化,并且可能存在错误。我检查了前一点。
  • 交换/洗牌是线索!
  • 每个 API 各司其职。

一般问题

首先,您有 2 个操作:

  • show... 显示

  • write.。镶木地板

  • 您需要更多地查看相关的 SQL 和详细信息才能了解情况。否则 - 恕我直言 - 很难跟上。

  • 由于没有缓存,两次都从流程的开头开始,但是有一个跳过的阶段。建议添加sqldf.cache()

第 0 阶段

  • Stage 0 对两种操作都是通用的。它只是简单地阅读标题。添加 inferSchema 将添加另一个 Stage。

显示

  • 有一个read 和一个count within partition per grouping(如Hadoop 组合器)(阶段)。
  • 然后有一个overall groupBy / count(舞台)。
  • show 是一个take ordered,它不需要以任何方式进行随机/交换。 show 是一个特定的实现,它没有用于生产作业(没有交换,所以没有新的阶段),它有自己的内部实现。

注意有一个跳过的阶段

  • 有一个read 和一个count within partition per grouping(类似于 Hadoop 组合器)(阶段)。
  • 然后有一个overall groupBy / count(舞台)。
  • sort(Stage) 需要从上一个随机播放/交换。
  • write 然后是一个(单独的阶段),它将洗牌到 2 个分区输出。排序减少了分区(从 4 个减少到 2 个)。

决赛 不直观,需要一点感觉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多