如何从目录中读取所有文件并并行执行操作?

时间:2018-01-22 10:25:50

标签: python apache-spark pyspark

假设我在目录中有一些文件,我想读取每个文件并从文件中提取文件名和第一行(即标题)以进行一些验证。我们如何在spark(使用python)中执行此操作。

input_file = sc.textFile(sourceFileDir)

通过sc.textFile()我们可以并行读取所有文件,但是使用map我们可以将任何规则或函数应用于rdd中的每个元素。我不明白如何使用sc.textFile()

仅获取文件名和所有文件的一行

目前,我正在使用for循环执行这些要求(如上所述)。

files = os.listdir(sourceFileDir) 
for x in files:
    **operations**

我如何以并行方式对所有文件执行相同操作,因为目录中有大量文件会节省一些时间。

提前致谢..

1 个答案:

答案 0 :(得分:0)

textFile不是您想要的。您应该使用wholeTextFile。它创建一个rdd,其键为FileName,值为content。然后您应用地图仅获取第一行:

sc.wholeTextFiles(sourceFileDir).map(lambda x : (x[0], x[1].split('\n')[0]))

通过这样做,地图的输出是fileName和第1行。