Scala 使用apachespark进行大容量文件转换

Scala 使用apachespark进行大容量文件转换,scala,pdf,apache-spark,etl,tiff,Scala,Pdf,Apache Spark,Etl,Tiff,这里是Spark/Scala n00bie 我有一大组文档,它们的页面存储为单独的tif图像。我需要将单个TIF转换并连接到单个PDF文档中。i、 e 1.tif,2.tif,3.tif->123.pdf 我一直在研究使用Spark来完成这项任务。我创建的初始RDD如下所示: val inputIFRDD=sc.binaryFile(“file:///some/path/to/lots/of/*tif“) InputIFRDD由以下形式的元组组成: (fullFilePath: String,

这里是Spark/Scala n00bie

我有一大组文档,它们的页面存储为单独的tif图像。我需要将单个TIF转换并连接到单个PDF文档中。i、 e 1.tif,2.tif,3.tif->123.pdf

我一直在研究使用Spark来完成这项任务。我创建的初始RDD如下所示:

val inputIFRDD=sc.binaryFile(“file:///some/path/to/lots/of/*tif“)
InputIFRDD由以下形式的元组组成:

(fullFilePath: String, data:org.apache.spark.input.PortableDataStream )
(fullFilePath: String, data:com.itextpdf.text.Document)
然后,我应用一个自定义映射函数,该函数将每个tif转换为pdf,并返回由以下形式的元组组成的RDD:

(fullFilePath: String, data:org.apache.spark.input.PortableDataStream )
(fullFilePath: String, data:com.itextpdf.text.Document)
现在我想对这个RDD应用一个操作,将PDF连接成一个PDF。我不认为减少是可能的,因为连接是不可交换的——页面的顺序很重要


我的问题是如何以正确的顺序实现RDD中元素的串联?文件名包含页码,因此可以使用此信息。或者-是否有其他更好/更有效的方法使用Spark进行转换/浓缩?

它不太适合Spark。Reduce将把所有数据放在驱动程序上。简单地在本地并行化作业会更有意义。@zero323-感谢您的回复。我担心实际上这可能不是spark的合理使用案例。就利用Spark而言,我想知道简单地使用一个映射来并行tif->pdf部分是否足够,然后让另一个非Spark作业来执行连接任务。你必须对此进行实验,但我的直觉是,运行Spark(同步和其他)的总成本可能会使其不太理想。由于这个工作看起来相当简单,一个强大的机器和并行的<代码>实际上可以做< <代码> > GNU并行:特别是如果你认为SCAP不能很好地处理大的<代码>二进制文件< /代码>。它不太像SCAP的一个很好的用例。Reduce将把所有数据放在驱动程序上。简单地在本地并行化作业会更有意义。@zero323-感谢您的回复。我担心实际上这可能不是spark的合理使用案例。就利用Spark而言,我想知道简单地使用一个映射来并行tif->pdf部分是否足够,然后让另一个非Spark作业来执行连接任务。你必须对此进行实验,但我的直觉是,运行Spark(同步和其他)的总成本可能会使其不太理想。由于工作看起来非常简单,您可以用一台强大的机器和并行的<>代码>使或GNU并行:实际上,如果您认为SARK不能处理大的<代码>二进制文件非常好。