2015-08-10 2 views
1

Мне нужно хранить массивы типов в RDD. Для этого я использую ArrayWritable класс от Hadoop :Эффективный способ хранения массива в RDD

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

Это работает, но я хотел бы быть уверенным, что объекты не будут упорядочены, если это не требуется. Я хотел бы сохранить в памяти как можно больше. Spark и Flink утверждают, что данные хранятся в памяти. В случае с классом ArrayWritable? Является ли это эффективным способом хранения массива? Спасибо!

Edit: из @mattinbits ответа, для Спарк, эффективный способ заключается в использовании Java массив или ArrayList (для динамического изменения размера)

+1

Зачем использовать тип Hadoop, а не только обычный Java-массив? – mattinbits

+0

Я начинаю с этой структурой. Как я понимаю, если я использую Java-массив, размер, если –

+0

Незавершенный комментарий? – mattinbits

ответ

0

В Спарк, 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)))