2016-08-25 136 views
0

想象一下,您正在通過SparkContext和Hive加載大型數據集。所以這個數據集然後分佈在你的Spark集羣中。例如,對數千個變量進行觀察(值+時間戳)。是Dataframe.toPandas總是在驅動程序節點上還是在工作節點上?

現在您將使用一些map/reduce方法或聚合來組織/分析您的數據。例如按變量名稱分組。

一旦分組,您可以獲得每個變量的所有觀察值(值)作爲時間序列數據框。如果現在使用DataFrame.toPandas

def myFunction(data_frame): 
    data_frame.toPandas() 

df = sc.load.... 
df.groupBy('var_name').mapValues(_.toDF).map(myFunction) 
  1. 是此轉換爲一個數據幀熊貓(每變量)每個工人 節點上,或
  2. 是熊貓Dataframes總是駕駛員節點和數據因此從工作節點轉移到驅動程序?

回答

4

在這種情況下,熊貓DataFrame沒有什麼特別之處。

  • 如果DataFrame通過使用toPandas方法上pyspark.sql.dataframe.DataFramethis collects data and creates local Python object on the driver創建。
  • 如果在執行程序進程(for example in mapPartitions)內部創建了pandas.core.frame.DataFrame,則只需獲取RDD[pandas.core.frame.DataFrame]。熊貓物體之間沒有區別,我們假設一個tuple
  • 最後僞代碼在你的例子不能工作,因爲你不能在執行程序線程內創建(以明智的方式)Spark DataFrame(我認爲你的意思是_.toDF)。
+1

因此,您可以在地圖功能中使用Pandas Dataframe API,以便即使在工作節點中也可以使用更多的convo敵方法。例如在地圖步驟中僅對該信息進行一些分析並返回結果。 – Matthias

+0

是的,它可能與SparkR'dapply'類似。獲得期望的性能可能會非常棘手,但您必須平衡資源分配和並行性。 – zero323

+0

你是我的英雄。我仍然是一個新手,但改善。也許你可以幫助我[這也是](http://stackoverflow.com/questions/39155954/how-to-do-a-nested-for-each-loop-with-pyspark)。 – Matthias

相關問題