在Python中使用foreach遍历Spark RDD

1 投票
1 回答
19275 浏览
提问于 2025-04-21 01:55

我正在尝试把一个非常大的 RDD(弹性分布式数据集)从集群中写入一个 .csv 文件。这个 RDD 太大了,使用 .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() 方法的情况下,把 foreach 的结果返回到 namenode 呢?

另外,我也愿意尝试使用 saveAsTextFile() 这个 RDD 方法,但同样我也没能让它正常工作!它似乎创建了一个文件夹,而不是一个文本文件,可能是因为这些文件在每个节点上都存在,而不是集中在一起?

1 个回答

1

这里的回答是:

如何在Python Spark中查看RDD的内容?

提到的原因是,这个功能不是Python 2.6版本支持的。

撰写回答