我想使用tika在spark中处理20 TB的pdf文件,这样每个pdf文件的每个输入都有一个输出。
我可以按顺序进行,但是要花很多时间。当以并行方式进行操作时(通过将输入作为包含pdf文件的整个目录来提供),它所花费的时间要少得多,但是输出是包含重叠值的部分文件。有什么方法可以并行执行,并且每个输入获得一个输出。
下面是我的代码:
val binRDD = sc.binaryFiles("/data")
val textRDD = binRDD.map(file => {new org.apache.tika.Tika().parseToString(file._2.open( ))}) textRDD.saveAsTextFile("/output/")
最佳答案
获取RDD中的文件名列表,然后对其进行并行化,如下所示。我尚未运行代码,但可能应该可以运行,或者您可以相应地对其进行调整
编辑:我已经运行了下面的代码,它为我工作
val files = new
File("C:/Users/mavais/Desktop/test").listFiles().filter(_.isFile()).toList
val filesRDD = sc.parallelize(files, 10)
filesRDD.map(r => {
sc.textFile(r.getPath)
.map(x=> x.toInt *x.toInt)
.coalesce(1).saveAsTextFile("C:/Users/mavais/Desktop/test/"+r.getAbsolutePath.split("\\\\").last.split("\\.")(0)))
}).collect()
关于apache-spark - 我想以一种方式处理hadoop中的20 TB pdf文件,以便每个pdf文件每个输入一个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54086682/