我需要处理分散在各个目录中的多个文件。我想将所有这些加载到单个RDD中,然后在其上执行map/reduce。我看到SparkContext能够使用通配符从单个目录加载多个文件。我不确定如何从多个文件夹加载文件。

以下代码段失败:

for fileEntry in files:
    fileName = basePath + "/" + fileEntry
    lines = sc.textFile(fileName)
    if retval == None:
        retval = lines
    else:
        retval = sc.union(retval, lines)

这在第三个循环中失败,并显示以下错误消息:
retval = sc.union(retval, lines)
TypeError: union() takes exactly 2 arguments (3 given)

鉴于我仅提供了两个参数,所以这很奇怪。任何指针表示赞赏。

最佳答案

措辞如何呢?

sc.union([sc.textFile(basepath + "/" + f) for f in files])

在Scala中,SparkContext.union()有两种变体,一种采用vararg参数,另一种采用列表。 Python中仅存在第二个(因为Python不具有多态性)。

更新

您可以使用一个textFile调用来读取多个文件。
sc.textFile(','.join(files))

关于python - Spark上下文文本文件: load multiple files,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23397907/

10-12 23:04