我的代码中有很多自定义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,以便我能够重用。那么有没有办法将上面的代码转换成各种变形金刚?
答案 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是抽象。在给定定义的操作的情况下,模型将相应地转换数据集。