我想在hadoop中处理20tb的pdf文件,这样每个pdf文件的每个输入都有一个输出

t5fffqht  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(404)

我想用tika在spark中处理20tb的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/")
xqnpmsa8

xqnpmsa81#

获取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()

相关问题