如何将二进制文件传输到spark中的rdd?

时间:2015-09-16 07:39:17

标签: apache-spark rdd

我正在尝试将seg-Y类型文件加载到spark中,并将它们传输到rdd以进行mapreduce操作。 但我未能将它们转移到rdd。有谁可以提供帮助吗?

2 个答案:

答案 0 :(得分:2)

您可以使用binaryRecords()pySpark调用将二进制文件的内容转换为RDD

http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.SparkContext.binaryRecords

  

binaryRecords(path,recordLength)

     

从a加载数据   平面二进制文件,假设每条记录都是一组数字   指定的数字格式(参见ByteBuffer)和字节数   每条记录都是不变的。

     

参数:path - 输入数据文件recordLength的目录 -   分割记录的长度

然后你可以使用例如struct.unpack()

将RDD映射到一个结构中。

https://docs.python.org/2/library/struct.html

我们使用这种方法来摄取固定宽度记录的二进制文件。有一些Python代码生成格式字符串(struct.unpack的第一个参数),但是如果你的文件布局是静态的,那么一次手动操作相当简单。

同样可以使用纯Scala:

http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.SparkContext@binaryRecords(path:String,recordLength:Int,conf:org.apache.hadoop.conf.Configuration):org.apache.spark.rdd.RDD[Array[Byte]]

答案 1 :(得分:0)

你没有给出太多细节,但你可以从使用SparkContextbinaryFiles()API开始

http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.SparkContext