2016-10-25 5 views
0

自分のコードにカスタムのDataframe変換がたくさんあります。 最初のグループは、単純なキャストです:Spark(Java)既存のUDF変換からカスタムトランスを作成する

dframe = dframe.withColumn("account_number", col("account").cast("decimal(38,0)")); 

第2のグループはUDF-変換である:彼らはすべてのように働いている

(UDF1<Timestamp, Integer>) s -> s.toLocalDateTime().extractMonth() 
dframe = dframe.withColumn("month", callUDF(("monthExtractor"), dframe.col("trans_date_t"))); 

コードはテストです。しかし、私の最終的な目標は、コードからML Pipelineを作成して再利用できるようにすることです。上記のコードをさまざまなトランスフォーマに変換する方法はありますか?

+0

[UDFからカスタムトランスフォーマを作成するにはどうすればいいですか?](http://stackoverflow.com/questions/35180527/how-to-create-a-custom-transformer-from-a-udf) –

+0

例を見つけました:http://supunsetunga.blogspot.ru/2016/05/custom-transformers-for-spark.html –

答えて

0

udfなどの方法で独自のフィーチャトランスフォーメーションを作成してから、sparkのトランスフォームメソッドをオーバーライドして、独自の操作の中に入れることができます。

githubのスパークコードは、必要なラッパーオブジェクトを作成することで、トランス機能を拡張する可能性についていくつかの洞察を提供します。

override def transform(dataset: Dataset[_]): DataFrame = { 
     transformSchema(dataset.schema, logging = true) 
     val xModel = new feature.XModel() 
     val xOp = udf {xModel.transform _ } 
     dataset.withColumn($(outputCol), xOp(col($(inputCol)))) 
     } 

ここで、xModelおよびxOpは抽象である。モデルは、定義された操作に従って、データセットを変換します。

関連する問題