2

我想通过使用不同的案例类将 dataFrame 转换为 dataSet。现在,我的代码如下所示。

case Class Views(views: Double)
case Class Clicks(clicks: Double)

def convertViewsDFtoDS(df: DataFrame){
    df.as[Views]
}

def convertClicksDFtoDS(df: DataFrame){
    df.as[Clicks]
}

所以,我的问题是“无论如何我可以通过案例类使用一个通用函数作为这个函数的额外参数吗?”

4

1 回答 1

4

它似乎有点过时(as方法完全符合您的要求),但您可以

import org.apache.spark.sql.{Encoder, Dataset, DataFrame}

def convertTo[T : Encoder](df: DataFrame): Dataset[T] = df.as[T]

或者

def convertTo[T](df: DataFrame)(implicit enc: Encoder[T]): Dataset[T] = df.as[T]

这两种方法是等价的并且表达完全相同的东西(类型的隐式存在EncoderT

如果你想避免隐式参数,你可以一直使用显式Encoder

def convertTo[T](df: DataFrame, enc: Encoder[T]): Dataset[T] = df.as[T](enc)

convertTo(df, encoderFor[Clicks])
于 2016-11-19T12:27:03.713 回答