我想通过使用不同的案例类将 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]
}
所以,我的问题是“我是否可以通过传递案例类作为该函数的额外参数来使用一个通用函数?”
看起来有点过时了(as
方法正是你想要的)但你可以
import org.apache.spark.sql.{Encoder, Dataset, DataFrame}
def convertTo[T : Encoder](df: DataFrame): Dataset[T] = df.as[T]
or
def convertTo[T](df: DataFrame)(implicit enc: Encoder[T]): Dataset[T] = df.as[T]
两种方法是等效的并且表达完全相同的事情(存在隐式Encoder
对于一个类型T
).
如果你想避免隐式参数,你可以使用显式参数Encoder
一直往下:
def convertTo[T](df: DataFrame, enc: Encoder[T]): Dataset[T] = df.as[T](enc)
convertTo(df, encoderFor[Clicks])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)