Ran*_*ize 5 scala apache-spark
Spark是否可以“包装”并运行外部进程来管理其输入和输出?
该过程由通常从命令行运行的普通C / C ++应用程序表示。它接受纯文本文件作为输入,并生成另一个纯文本文件作为输出。当我需要将此应用程序的流程与更大的对象(始终在Spark中)集成时,我在想是否有办法做到这一点。
该过程可以轻松地并行运行(目前使用GNU Parallel),只需将其输入拆分为(例如)10个零件文件,在其内存中运行10个实例,然后将最后的10个零件文件重新合并为一个即可文件。
您可以做的最简单的事情是编写一个简单的包装器,它从标准输入中获取数据、写入文件、执行外部程序并将结果输出到标准输出。之后你所要做的就是使用pipe方法:
rdd.pipe("your_wrapper")
Run Code Online (Sandbox Code Playgroud)
唯一需要认真考虑的是 IO 性能。如果可能,最好调整您要调用的程序,以便它可以直接读取和写入数据,而无需通过磁盘。
或者,您可以mapPartitions结合使用process标准 IO 工具写入本地文件、调用程序并读取输出。