如何将编码器作为参数传递给数据帧的 as 方法

Posted

技术标签:

【中文标题】如何将编码器作为参数传递给数据帧的 as 方法【英文标题】:How to pass Encoder as parameter to dataframe's as method 【发布时间】:2016-11-19 12:08:37 【问题描述】:

我想通过使用不同的案例类将 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]

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

【问题讨论】:

【参考方案1】:

它似乎有点过时(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])

【讨论】:

以上是关于如何将编码器作为参数传递给数据帧的 as 方法的主要内容,如果未能解决你的问题,请参考以下文章

将 DataFrame 切片作为参数传递给没有“SettingWithCopyWarning”的函数

将参数传递给 AS400 中的存储过程以匹配 IN 键

如何将参数传递给 ms 访问以取回数据

如何将 JSON 作为参数传递给控制器​​ .net api 中的 Post 方法

如何将 JavaScript 变量作为参数传递给 JSF 操作方法?

如何将类方法作为参数传递给该类外部的函数?