我有一个格式为(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
/_/