【提问】Spark使用binaryFile加载二进制文件,如何处理

在使用binaryFile加载二进制文件之后,得到的是包含[String,PortableDataStream]的pair的RDD。我继续对得到的RDD使用map,使用PortableDataStream的toArray方法得到二进制文件转换之后的Byte数组。有如下几个问题:
1,我该如何我该如何将这个Byte的数组按四个Byte合并为一个float?
2,这个portableDataStream是如何做到并行计算的?
3,生成的RDD如何保证如何存储为目标格式的HDFS文件格式,比如我要处理一张图片,调用savaAsTextFiles之后得到的是HDFS的文件格式,那么我在RDD中的数据是怎样的呢?

楼主刚开始学spark还望各位高手指教指教~~~ ^_^

请问楼主问题解决了吗?我最近也在做Spark处理图像文件,使用binaryFile加载后该如何处理呢?

1、binaryFile是以path下的文件并行处理的,RDD[String,PortableDataStream]中第一个String就是path/fileName。当然你也可以接着用repartition重新设定并行度。

2、按四个Byte生成float(假设每个文件的数据可以混淆处理(不能混淆的话,逻辑要复杂些,每步需要用文件名做key)):

import org.apache.hadoop.hbase.util.Bytes

sc.binaryFile($路径)
  .map(_._2.toArray.groupd(4))  // 按4字节分组 RDD[Seq[Array[Byte]]],如果长度不能被4整除,最后一个byte数组将用0补位
  .flatMap(_.Iterable)          // 扁平化 RDD[Array[Byte]]
  .repartition($分区数)          // 根据需要,如果文件比较多,此步可省略
  .map(Bytes.toFloat(_))        // RDD[byte(4)] => RDD[float]

题主这几个问题有结论了吧?能否说一下呢