2015-06-15 90 views
2

我無法找到如何讀取Spark SQL的onDebugString輸出。 我不明白如何讀取Spark SQL的toDebugString輸出?

  • 什麼那些#NUMBER靠近列名
  • 什麼真的還是假的均值附近聚集或排序(如:排序[l_returnflag#404 ASC,l_linestatus#405 ASC],真)
  • 什麼BuildLeft或BuildRight上ShuffledHashJoin
  • 的意思是爲什麼有quering鑲木數據庫和他們做了什麼意思

通過以下鏈接爲toDebugString輸出時!OutputFaker線對兩種不同數據庫格式的相同查詢。

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

http://pastebin.com/pZNfCHPc

回答

1
  1. #NUMBER是名稱(數據幀內部字段表示)的一部分。 DataFrame允許有兩個同名的字段(它們有不同的#號)。試圖選擇其中之一會有問題 - 你會得到它的含糊不清。
  2. 集合/排序真/假。 True表示它是本地操作。在您的示例中,您可以看到總是存在聚合true,然後是Exchange,然後聚合false。這意味着每個分區在每個節點本地發生了一些聚合,然後節點交換它們的散列以知道發送數據的位置,然後聚合在遠程節點上完成。
  3. BuildLeft和BuildRight,我只能推測這是加入雙方。通過加入,你總是有兩部分加入 - 左側和右側。而已。
  4. 不能告訴OutputFaker是什麼,但對完整的Javadoc說:

    ,什麼也不做,但撒謊其子的輸出的計劃節點。用於將來自不同優化序列的 (希望在結構上等效)樹添加到已解析的樹中。

大多數操作的說自己像過濾或兌換,但有時它知道其中的差別是很重要的:ShuffledHashJoin VS BroadcastHashJoin。在我看來,解釋是有幫助的。

此外,它可以打印的細節(不僅是體力計劃)解釋,只需要調用解釋(真)