我想在不同阶段的数据帧上定义一组聚合和操作,但如果你熟悉Frameless (我不想使用Frameless),比如JobA,我不希望它们被执行(只是定义),然后再执行(就像管道一样)。
def addSelect(df:Dataframe) = {
df.select("name")
}
def addCount(df:Dataframe) = {
df.count()
}
def addSum(df:Dataframe) = {
df.sum()
}
def addShow(df:Dataframe) = {
df.show()
}
val df = ...
val pipeline = addSum( addSelect(df) )
//if(userWantsToExecute) pipeline.execute()发布于 2019-07-29 23:06:45
您可以像这样创建自己的管道:
final class Pipeline[A] private (val run: () => A) extends AnyVal {
final def compose[B](f: A => B): Pipeline[B] =
new Pipeline(() => f(this.run()))
}
object Pipeline {
def start[A](input: => A): Pipeline[A] =
new Pipeline(() => input)
}这基本上和我在我的评论中说的一样,但这让它更容易使用。
例如:
val pipeline = Pipeline.start(input = df).compose(addSelect).compose(addSum)
pipeline.run()注意:以上代码是通用的,如果您愿意,您可以将其更具体地用于DataFrames。
https://stackoverflow.com/questions/57247114
复制相似问题