2016-10-25 3 views
0

코드에서 많은 사용자 정의 데이터 프레임 변환이 있습니다. 첫 번째 그룹은 간단 캐스팅입니다 :Spark (Java) 기존 UDF 변환에서 사용자 정의 변압기 만들기

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

두 번째 그룹은 UDF-변환입니다 : 그들은 모두 그렇게 노력하고 있습니다

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

코드가 테스트입니다. 하지만 최종 목표는 재사용 할 수 있도록 ML 파이프 라인을 코드에서 생성하는 것입니다. 위의 코드를 다양한 트랜스포머로 변환 할 수있는 방법이 있습니까?

+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는 추상화이다. 모델은 정의 된 작업에 따라 데이터 세트를 변형합니다.

관련 문제