我想在 hadoop中处理 20 TB 的 pdf 文件,以便每个 pdf 文件的每个输入都有一个输出



我想使用 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()

最新更新