2016-12-29 37 views
0

我的代碼:DAG何時在Spark中創建?

scala> val records = List("CHN|2", "CHN|3" , "BNG|2","BNG|65") 
records: List[String] = List(CHN|2, CHN|3, BNG|2, BNG|65) 

scala> val recordsRDD = sc.parallelize(records) 
recordsRDD: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[119] at parallelize at <console>:23 

scala> val mapRDD = recordsRDD.map(elem => elem.split("\\|")) 
mapRDD: org.apache.spark.rdd.RDD[Array[String]] = MapPartitionsRDD[120] at map at <console>:25 

scala> val keyvalueRDD = mapRDD.map(elem => (elem(0),elem(1))) 
keyvalueRDD: org.apache.spark.rdd.RDD[(String, String)] = MapPartitionsRDD[121] at map at <console>:27 

scala> keyvalueRDD.count 
res12: Long = 5 

正如你可以看到上面有在3 RDD的。

我的問題是什麼時候DAG被創建和DAG包含什麼?

當我們使用任何轉換創建RDD時,它會被創建嗎?

它創建時,我們呼籲現有RDD一個動作,然後引發自動啓動該DAG?

基本上我想知道在創建RDD時內部發生了什麼?

+3

的[在哪裏學習DAG在RDD在幕後是如何工作的?(可能的複製http://stackoverflow.com/questions/25836316/where-to-learn-how-dag-works-under-它包含了分佈式任務所需的所有依賴關係。「 –

回答

-1
  • DAG是在作業執行時(當您調用動作時)創建的,它包含分佈式任務所需的全部依賴項。

  • DAG不執行。基於DAG Spark確定分配給工作人員並執行的任務。

  • 單獨的RDD通過遍歷遞歸依賴性來定義譜系。

+0

」。 - 考慮到第二項,我認爲你考慮DAG == RDD譜系(這是正確的,並且是RDD依賴關係的DAG)。階段的DAG是不同的,由DAGScheduler創建。只有在DAGScheduler之後,第一個DAG被轉換爲另一個DAG,然後才顯示出任務。 –

+0

因此,您在這裏將DAG和血統同義嗎? – user7337271

+1

它取決於Spark作業處理的階段(雙關語意)。 RDD沿襲_確實是RDD依賴關係的DAG。 –

相關問題