2017-09-02 124 views
1

我是新來斯卡拉/火花(大約一個星期現在)斯卡拉/星火選擇列很慢

下面的代碼被我的8核心的筆記本電腦,64位,Win10 運行數據幀有1700行。 ONE選擇需要十秒以上。

看着控制檯顯示主要掛在這一點上:

17/09/02 12時23分46秒INFO FileSourceStrategy:修剪目錄有:

守則

{ 

    val major:String =name.substring(0,name.indexOf("_SCORE"))+"_idx1" 
    println(major) 
    val majors = dfMergedDroppedDeleted 
     .select(col(major)) 
     .collect().toSeq 
    println(s"got majors ${majors.size}") 
} 

這應該需要幾毫秒(基於休眠,r,mysql等的經驗) 我假設我的火花配置有問題嗎?

任何建議將是最受歡迎的。

全控制檯輸出到掛起如下:

1637_1636_1716_idx1

1637_1636_1716_idx2

17/09/02 12時23分08秒INFO ContextCleaner:已清除累加器765

17/09/02 12:23:08 INFO ContextCleaner:清理累加器763

17/09/02 12時23分08秒INFO BlockManagerInfo:在存儲器上刪除了192.168.0.13:62246 broadcast_51_piece0(尺寸:113.7 KB,免費:901.6 MB)

17/09/02 12點23: 08 INFO ContextCleaner:已清除累加器761

17/09/02 12時23分08秒INFO ContextCleaner:已清除累加器764

17/09/02 12時23分08秒INFO ContextCleaner:已清除累加器762

17/09/02 12:23:08 INFO ContextCleaner:清理累加器766

17/09/02 12時23分08秒INFO BlockManagerInfo:在存儲器上刪除了192.168.0.13:62246 broadcast_50_piece0(尺寸:20.7 KB,免費:901.6 MB)

17/09/02 12點23: 08信息FileSourceStrategy:修剪目錄:

+0

星火快得多沒有內置用於同樣用途的,如MySQL數據庫。你在哪裏運行?在火花外殼或提交?多少個文件和多少個分區?你在這之前運行什麼代碼? – Garren

+0

我目前正在運行作爲junit測試。從csv導入一個數據文件。在此之前,已經有多個數據幀轉換,其中的列與withColumn()合併在一起。這是很多代碼,我不相信這個問題是相關的,因爲我現在有一個大約1000個變量和1700行的單個數據框 – Jake

+0

注意:這是數據清理操作的一部分。我通常在R. – Jake

回答

1

將數據幀放入緩存中會產生很大的差異。

val dfMergedDroppedDeletedCached:DataFrame=dfMergedDroppedDeleted.cache() 

然而,緩存過程本身很慢,所以這只是不負有心人,如果你正在執行多個操作

UPDATE 信用拉梅什Maharjan到誰在評論中寫道:

耗時的部分沒有選擇。 select是自然分佈的,並且會在執行者的每個本地數據中執行。耗時的部分是收集。 Collect功能收集驅動程序節點中的所有數據。這需要很多時間。這就是爲什麼收集總是建議不要使用,如果有必要使用它的最低限度。

我已經改變了查詢,如下:

  val majorstr:String = dfMergedDroppedDeletedCached.filter(dfMergedDroppedDeletedCached(major).isNotNull) 
      .select(col(major)) 
      .limit(1) 
      .first().getString(0) 

不完全是甲骨文速度,但不是使用收集

+0

偉大:)並感謝信用 –

+0

你也值得代表。如果你想以你的名義重新發布答案,我會很樂意刪除我的。我不想「竊取」代表,只是想確定答案在那裏,因爲這在以前沒有在互聯網上討論過,根據我的知識 – Jake

+1

讓答案保持原樣。你寫完了。 :) –