重新组织RDD中的数据并以定义的格式存储

时间:2016-07-29 17:07:59

标签: scala apache-spark rdd

我有一个格式为(Int, Array[Byte])的Sequence文件,我将其加载到Spark中。我想以下列格式存储此信息:Seq[Seq[Array[Byte]]]

Sequence文件中的每一行代表一条消息,其中的密钥是消息ID。我想将这些消息分批分组(我们称之为messageSet)并将其存储为Seq

根据消息的数量,我可以有多个来自一个Sequence文件的messageSets。为了改进计算,我更喜欢使用mapPartitions,但它不是强制性的。

Message = Array[Byte]
MessageSet = Seq[Array[Byte]]
MessageSets = Seq[Seq[Array[Byte]]] // Sequence File

我尝试了以下内容:

val rdd = sc.sequenceFile[Int, Array[Byte]](path)

var messageSets: Seq[Seq[Array[Byte]]] = Nil
rdd.foreachPartition(iter => {
  var messageSet: Seq[Array[Byte]] = Nil
  iter.grouped(batchSize).foreach(mSet => messageSet :+= mSet.map(m => m._2).seq)
  messageSets :+= messageSet
})

但是,它给了我以下错误:

Error:(419, 58) type mismatch;
 found   : Seq[Object]
 required: Seq[Array[Byte]]
 iter.grouped(batchSize).foreach(mSet => messageSet :+= mSet.map(m => m._2).seq)
                                                          ^

有人可以帮我弄清楚出了什么问题吗?

元数据

scala -version
Scala code runner version 2.11.8 -- Copyright 2002-2016, LAMP/EPFL

spark-submit --version
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.1
      /_/

0 个答案:

没有答案