在Spark中,如果给出文件名列表,我如何并行处理和写入文件?

时间:2018-03-21 04:54:16

标签: apache-spark parallel-processing

我有一个存储在HDFS中.txt中的文件名和路径列表,它们也是存储在HDFS中的文件的路径。我想调用一个函数进行一些解析,然后并行写入HDFS。这就是我到目前为止所做的:

val files = sc.textfile("Filenames.txt")
val paths = files.map( line => line.split(" ") )
sc.textfile.collect().foreach( paths(1) => parseAndWrite( paths(1) ) )

然而,Spark最终一次解析每个文件,而不是并行解析。我也试过用另一张地图跳过收集,并使用来自scala集合parVector的.par,但无济于事。我怎样才能最好地接近这个?

编辑:

parseAndWrite将包含以下内容:

def parseAndWrite(filepath: String): Unit = {
    val df = spark.read.format("csv").load(filepath)

    // do some parsing logic on df here


    dfParsed.write.format("csv").save(anotherfilepath)

}

1 个答案:

答案 0 :(得分:0)

请参阅
https://stackoverflow.com/a/24036343/5568528

您可以使用通配符
sc.textfile("/home/mydir/files/*")
或者,可能爆炸阵列 在python中,这将是
sc.textfile(*paths)