2017-03-14 33 views
1

我正在使用R/spark循環播放一些csv數據文件。每個文件的大約1%必須保留(根據特定標準過濾)並與下一個數據文件合併(我已使用union/rbind)。但是,隨着循環運行,數據沿襲的時間越來越長,因爲火花會記住所有以前的數據集和filter()-s。檢查點SparkR中的數據幀

有沒有辦法在spark API中做點校驗?我已經瞭解到spark 2.1對DataFrames有檢查點,但是這似乎無法從R.

回答

1

我們在Scala/GraphX的相當大的圖形上(幾十億數據)和搜索連接組件 。

我不確定R對於您的特定版本有什麼可用,但通常的解決方法是通過「保存」數據然後重新加載來破壞譜系。在我們的例子中,我們打破了沿襲每15次迭代:

def refreshGraph[VD: ClassTag, ED: ClassTag](g: Graph[VD, ED], checkpointDir: String, iterationCount: Int, numPartitions: Int): Graph[VD, ED] = { 
    val path = checkpointDir + "/iter-" + iterationCount 
    saveGraph(g, path) 
    g.unpersist() 
    loadGraph(path, numPartitions) 
} 
+0

謝謝,我看你在每個循環使用不同的文件。我之前用同一個文件嘗試過,所以它不起作用。如果它適合我​​,我會測試並接受你的答案。 –

+0

它似乎現在工作:-)雖然我遇到了另一個瓶頸:-( –

+0

你可以編輯你的第一個問題或鏈接到你的新問題 – glefait

0

一個不完整的解決方案/解決方法是collect()您的數據幀到R對象,後來被createDataFrame()重新並行。這適用於小數據,但對於較大的數據集,它變得太慢並且抱怨太大的任務。