spark(java)用现有的udf转换创建定制的转换器

nszi6y05  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(368)

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

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管道,以便能够重用。那么有没有办法把上面的代码转换成各种变压器呢?

fdbelqdn

fdbelqdn1#

您可以创建自己的特征转换(使用udf或其他方法),然后重写spark的转换方法,并将其放入自己的操作中。
github上的spark代码为您提供了一些关于扩展transformer功能的可能性的见解,前提是您需要创建 Package 器对象。

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

相关问题