1
我想使用Array [Byte]作爲RDD的Key。例如:如何在RDD中使用字節數組作爲鍵?
val rdd1:RDD[((Array[Byte]), (String, Int)] = from src rdd
val rdd2:RDD[((Array[Byte]), (String, Int)] = from dest rdd
val resultRdd = rdd1.join(rdd2)
我想執行使用數組[字節]作爲重點 上RDD1集和RDD2聯接操作,但總是讓resultRdd.count()= 0。
所以我試圖序列化數組[字節]和它工作正常,因爲我想看到,只爲小數據集。
val serRdd1= rdd1.map { case (k,v) => (new SerByteArr(k), v) }
val serRdd2= rdd2.map { case (k,v) => (new SerByteArr(k), v) }
class SerByteArr(val bytes: Array[Byte]) extends Serializable {
override val hashCode = bytes.deep.hashCode
override def equals(obj:Any) = obj.isInstanceOf[SerByteArr] && obj.asInstanceOf[SerByteArr].bytes.deep == this.bytes.deep
}
對於大型數據集,得到java.lang.OutOfMemoryError:GC開銷超過限制, 問題是在創建對象(新SerByteArr(k))的存在的。
如何避免GC限制超過錯誤。有人幫我嗎?
你的數組有多大?將它們替換爲散列是否合理? – maasg