我使用R / spark循环遍历许多csv数据文件。必须保留每个文件的大约1%(根据特定条件进行过滤)并与下一个数据文件合并(我使用了union
/ rbind
)。但是,随着循环的运行,数据的谱系会越来越长,因为火花会记住所有以前的数据集和filter()
- s。
有没有办法在spark R API中进行检查点?我已经了解到spark 2.1具有DataFrames的检查点,但似乎没有从R中获得。
答案 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()
重新并行化。这适用于小数据,但对于较大的数据集,它变得太慢并且抱怨任务太大。