在 RDD 中存储数组的有效方法

Efficient way to store an array in a RDD

我需要在 RDD 中存储类型数组。为此,我使用 Hadoop 中的 ArrayWritable class :

static public class Record {
    public long id;
    public FloatArrayWritable dataArray;
}

它有效,但我想确保对象在不需要时不会被序列化。我想尽可能地留在记忆中。 Spark 和 Flink 声称将数据保存在内存中。 ArrayWritable class 是这样吗?这是存储数组的有效方法吗? 谢谢!

编辑: 来自@mattinbits 的回答,对于 Spark,有效的方法是使用 Java arrayArrayList (用于动态调整大小)

在 Spark 中,java.util.ArrayList 应该可以正常工作。我测试过的 Scala 示例:

import org.apache.spark.{SparkContext, SparkConf}
import java.util

case class Foo(val a: Int, val b: util.ArrayList[Int])

val conf = new SparkConf().setMaster("local").setAppName("example")
val sc = new SparkContext(conf)

val arr = new util.ArrayList[Int]()
arr.add(1)

val par = sc.parallelize[Foo](List(Foo(1, arr), Foo(2, arr), Foo(2, arr), Foo(3, arr), Foo(3, arr)))