Spark(Java)使用现有的UDF转换创建自定义转换器

时间:2016-10-25 17:18:19

标签: java apache-spark user-defined-functions

我的代码中有很多自定义Dataframe转换。 第一组是简单的铸造:

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

第二组是UDF-Transformations:

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

他们都在工作,所以代码正在测试。但我的最终目标是从代码中创建ML Pipeline,以便我能够重用。那么有没有办法将上面的代码转换成各种变形金刚?

1 个答案:

答案 0 :(得分:0)

您可以创建自己的特征转换(使用udf或其他方法),然后覆盖spark的转换方法,并将其放入您自己的操作中。

如果您创建必要的包装器对象,github上的spark代码可以让您深入了解扩展变换器功能的可能性。

 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是抽象。在给定定义的操作的情况下,模型将相应地转换数据集。