2016-08-06 55 views
1

für Unit-Tests Zweck ich mein eigenes HBase Ergebnis Objekt am Bau alsWie produzieren RDD [Ergebnis] für Unit-Tests

val row = Bytes.toBytes("row01") 
val cf = Bytes.toBytes("cf") 
val cell1 = new KeyValue(row, cf, "v1".getBytes(), Bytes.toBytes("file1")) 
val cell2 = new KeyValue(row2, cf, "v2".getBytes(), Bytes.toBytes("file2")) 

val cells = List(cell1, cell2) 

val result = Result.create(cells) 

Nun folgt möchte ich dies zu einem sparkContext Objekt schreiben,

val sparkContext = new org.apache.spark.SparkContext(conf) 
val rdd = sparkContext.parallelize(List(result)) 

Allerdings, wenn ich versuche, die rdd über foreach zugreifen zu können, wie

rdd.foreach{x=>x} 

habe ich den berühmten Funken Aufgabe nicht seriali Zabel.

Kennt jemand eine bessere Möglichkeit, RDD [Ergebnis] zu krete?

Antwort

1

Result ist nicht serialisierbar, wenn Sie also ein RDD[Result] wollen, müssen Sie die Result s auf dem Knoten selbst aus einem anderen Eingang (und natürlich produzieren, dann Aktionen wie collect, first die Result s zwischen den Knoten senden würden usw. wird nicht funktionieren). So z.B.

val rdd0 = sparkContext.parallelize(List(("row", "cf"))) 

val rdd = rdd.map { case (str1, str2) => 
    val row = Bytes.toBytes(str1) 
    val cf = Bytes.toBytes(str2) 
    val cell1 = new KeyValue(row, cf, "v1".getBytes(), Bytes.toBytes("file1")) 
    val cell2 = new KeyValue(row2, cf, "v2".getBytes(), Bytes.toBytes("file2")) 

    val cells = List(cell1, cell2) 

    Result.create(cells) 
}