我想通过使用不同的案例类将 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]
或
def convertTo[T](df: DataFrame)(implicit enc: Encoder[T]): Dataset[T] = df.as[T]
这两种方法是等效的,并且表达完全相同的事物(T
类型存在隐式 Encoder
)。
如果您想避免隐式参数,您可以一直使用显式Encoder
:
def convertTo[T](df: DataFrame, enc: Encoder[T]): Dataset[T] = df.as[T](enc)
convertTo(df, encoderFor[Clicks])
关于scala - 如何将编码器作为参数传递给数据帧的 as 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692691/