如何阅读Spark SQL的toDebugString输出?

时间:2015-06-15 18:21:03

标签: apache-spark apache-spark-sql

我无法了解如何阅读Spark SQL的onDebugString输出。 我不明白

  • 那些#number接近列名称
  • 聚合或排序附近的真或假意义(例如,排序[l_returnflag#404 ASC,l_linestatus#405 ASC],true)
  • BuildLeft或BuildRight在ShuffledHashJoin上的含义
  • 查询Parquet数据库时有什么!OutputFaker行及其含义

以下是两种不同数据库格式的相同查询的toDebugString输出的链接。

Avro http://pastebin.com/BPwwfdzz

Parquet http://pastebin.com/pZNfCHPc

1 个答案:

答案 0 :(得分:1)

  1. #number是name(DataFrame内部字段表示)的一部分。 DataFrame允许具有两个具有相同名称的字段(它们具有不同的#number)。尝试选择其中一个会有问题 - 你会觉得它很模糊。
  2. 聚合/排序true / false。 True表示它是本地操作。在您的示例中,您可以看到总是Aggregate为true,然后是Exchange,然后是Aggregate false。这意味着在每个节点上为每个分区本地发生了一些聚合,然后节点交换它们的哈希以知道在何处发送数据,然后聚合在远程节点上完成。
  3. BuildLeft和BuildRight,我只能推测它是连接方。通过连接,你总是有两个你加入的部分 - 左和右。就是这样。
  4. 不知道什么是OutputFaker,但为了完整性,javadoc说:
      

    一个计划节点,除了关于其子节点的输出之外什么都不做。用来调味   (希望在结构上等效)树从不同的优化序列到已经   解决了树。

  5. 大多数操作都说自己喜欢过滤或交换,但有时知道差异很重要:ShuffledHashJoin vs BroadcastHashJoin。在我看来,为什么解释是有帮助的。

    此外,可以打印带有详细信息的说明(不仅仅是物理计划),只需调用 explain(true)