Я хочу обработать 20 ТБ PDF-файлов в Hadoop таким образом, чтобы на каждый вход для каждого PDF-файла приходился один вывод. - PullRequest
0 голосов
/ 08 января 2019

Я хочу обработать 20 ТБ pdf-файлов в spark с использованием tika таким образом, чтобы на каждый вход для каждого pdf-файла приходилось по одному выводу.

Я могу сделать это последовательно, но это занимает много времени. Делая это параллельно (предоставляя входные данные как весь каталог, содержащий файлы pdf), это занимает очень мало времени, но выходные данные представляют собой файлы деталей, содержащие перекрывающиеся значения. Есть ли способ, которым я могу сделать это параллельно и получить один выход на вход.

Ниже мой код: -

val binRDD = sc.binaryFiles("/data")

val textRDD = binRDD.map(file => {new org.apache.tika.Tika().parseToString(file._2.open( ))}) textRDD.saveAsTextFile("/output/")

1 Ответ

0 голосов
/ 10 января 2019

Получить список имен файлов в 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()
...