我正在尝试在群集上运行非常大的RDD并将其写入.csv。它是如此之大以至于.collect()中断了,所以相反我想将RDD保存到每个节点上的碎片然后以某种方式将它们组合在一起,因为顺序并不重要。我的想法是将foreach与CSV打印机功能一起使用,以便每个部分都写入它的值,然后我可以手动将这些部分聚集在一起,也许是通过FTP。
我是具有一定经验的Spark用户,但到目前为止,我从未能够使RDD的foreach方法做任何有用的事情。当我尝试运行文档中给出的示例时,
>>> def f(x): print x
>>> sc.parallelize([1, 2, 3, 4, 5]).foreach(f)
我的控制台上什么也没收到。我相信这是因为'print'是在单独的节点上执行的,而不是在控制台所在的namenode上执行的。在那种情况下,我真的不能在foreach函数中看到太多的意义!
如果没有先调用collect()函数,如何将我的每个结果返回到name节点?
NB。我也愿意使用saveAsTextFile()RDD函数,但我再次无法使它工作!它似乎创建了一个文件夹而不是文本文件,虽然这可能是因为它们存在于每个节点上而不是集中存在?