如何在Apache Spark中"管道"二进制数据

Nic*_*len 5 apache-spark

我有一个包含二进制数据的RDD.我想使用'RDD.pipe'将二进制数据传输到外部程序,将其转换为字符串/文本数据.不幸的是,似乎Spark在将二进制数据传递给外部程序之前将其修改.

此代码代表了我要做的事情.我究竟做错了什么?如何在Spark中管理二进制数据?

bin = sc.textFile("binary-data.dat")
csv = bin.pipe ("/usr/bin/binary-to-csv.sh")
csv.saveAsTextFile("text-data.csv")
Run Code Online (Sandbox Code Playgroud)

具体来说,我试图使用Spark将pcap(数据包捕获)数据转换为text/csv,以便我可以对其进行分析.

Nic*_*len 5

问题不在于我使用'pipe',而是'textFile'不能用于读取二进制数据.(Doh)有几种选择可以继续前进.

  1. 实现了解二进制输入数据的自定义"InputFormat".(非常感谢Cloudera的Sean Owen指出这一点.)

  2. 使用'SparkContext.binaryFiles'将整个二进制文件作为单个记录读入.这会影响性能,因为它会阻止在文件数据上使用多个映射器.

在#1的特定情况下,我只能从RIPE-NCC找到一个这样做的项目.不幸的是,它似乎只支持一组有限的网络协议.