apache-spark - 我想以一种方式处理hadoop中的20 TB pdf文件,以便每个pdf文件每个输入一个输出

标签 apache-spark hadoop text-processing apache-tika

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

相关文章:

macos - native 库 lz4 不适用于 Spark

python - 正则表达式 - 如何在更大的整个字符串中找到这个特定的字符串片段

security - Hive 中的角色分配

python - 使用python在线阅读大文本

linux - 重复从一行中提取组名?

scala - 为什么 apache spark 中的这两个阶段计算的是同一件事?

scala - Apache Spark SQL 标识符预期异常

apache-spark - 指定字符串长度超过 256 的 pyspark 数据帧架构

hadoop - 如何在配置单元中的字符串数据类型以外的列中插入空值而不是 NULL

hadoop作业跟踪器无法启动