在SparkR中检查点DataFrames

时间:2017-03-14 22:21:08

标签: r apache-spark checkpointing

我使用R / spark循环遍历许多csv数据文件。必须保留每个文件的大约1%(根据特定条件进行过滤)并与下一个数据文件合并(我使用了union / rbind)。但是,随着循环的运行,数据的谱系会越来越长,因为火花会记住所有以前的数据集和filter() - s。

有没有办法在spark R API中进行检查点?我已经了解到spark 2.1具有DataFrames的检查点,但似乎没有从R中获得。

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:0)

不完整的解决方案/解决方法是将您的数据框collect()转换为R对象,然后再按createDataFrame()重新并行化。这适用于小数据,但对于较大的数据集,它变得太慢并且抱怨任务太大。