我需要处理分散在各个目录中的多个文件。我想将所有这些加载到单个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/