如何读取Spark SQL的toDebugString输出?



我找不到如何读取Spark SQL的onDebugString输出。我不明白

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

下面是指向两种不同数据库格式的同一查询的 toDebugString 输出的链接。

阿夫罗 http://pastebin.com/BPwwfdzz

镶木地板 http://pastebin.com/pZNfCHPc

  1. #number 是名称(数据帧内部字段表示形式)的一部分。数据帧允许有两个具有相同名称的字段(它们具有不同的 #number)。尝试选择其中之一会有问题 - 你会得到它模棱两可。
  2. 聚合/排序真/假。true 表示它是本地操作。在您的示例中,您可以看到始终存在聚合真,然后是交换,然后是聚合假。这意味着在每个分区的每个节点上本地发生一些聚合,然后节点交换其哈希以了解将数据发送到何处,然后在远程节点上完成聚合。
  3. BuildLeft和BuildRight,我只能推测这是连接双方。通过执行连接,您始终有两个部分加入 - 左和右。就是这样。
  4. 无法分辨什么是 OutputFaker,但为了完整起见,javadoc 说:

    一个计划节点,它只对其子项的输出撒谎。 用于调味 (希望结构等效)树从不同的优化序列到已经 已解析的树。

大多数操作都像过滤或交换一样,但有时了解区别很重要:ShuffledHashJoin vs BroadcastHashJoin。这就是为什么解释是有帮助的。

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

相关内容

  • 没有找到相关文章

最新更新