2017-02-27 6 views
0

私はさまざまな種類の特性パイプオブジェクトを持っており、さらにアクセスするためにこれらのオブジェクトを1つの構造体に保存したいと考えています。異なるタイプのオブジェクトを1つのデータ構造に格納する方法

trait Pipe[In, Out] { 

    def apply(rdd: RDD[In]): RDD[Out] 

    def |[Final](next: Pipe[Out, Final]): Pipe[In, Final] = { 
    // Close over outer object 
    val self = this 
    new Pipe[In, Final] { 
     // Run first transform, pass results to next 
     def apply(rdd: RDD[In]) = next(self(rdd)) 
    } 
    } 

} 
val timestampConverter = new Pipe[String, String] 
val summaryBuilder = new Pipe[String, String] 
val rddSeperator = new Pipe[String, (String, ArrayBuffer[Double])] 
val rddSorter = new Pipe[(String, Double), String] 

val pipeline = timestampConverter | summaryBuilder | rddSeperator | rddSorter 
+3

Pipeオブジェクトを使って、もっと正確に言うことができますか?あなたは例を挙げることができますか?質問は本当に火花に関連していますか? – lex82

答えて

0
import shapeless.hlist.ops._ 
    import shapless.:: 

    trait Pipe[In, HL <: HList] { self => 

    def apply(rdd: RDD[In]): RDD[Out] 

    def |[Final](
     next: Pipe[Out, Final :: HL] 
    ): Pipe[In, Final :: HL] = { 

     new Pipe[In, Final :: HL] { 
     // Run first transform, pass results to next 
     def apply(rdd: RDD[In]) = next(self(rdd)) 
     } 
    } 
    } 

あなたが簡単な異種のリストで行うことができますように聞こえます。私は直列化のためにSparkでこれがどのくらいうまくいくか分かりませんが、一発の価値があります。次に、HLを反転させて、引数を入力順に取得できます。

self参照は必須ではありません。これはJavaScriptではありません。

関連する問題