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

标签 scala apache-spark apache-spark-sql apache-spark-dataset apache-spark-encoders

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

相关文章:

azure - 如何将 Sql 查询结果从 Azure Synapse 笔记本传递到 Synapse Pipeline 中的下一个事件?

Scala/Slick 3.0.1 - 更新多列

scala - 如何使用 Akka HTTP Server 嵌入 Play 2.6?

Scala Akka Streams 合并过滤器和映射

scala - 如何在 ML Pipeline 中访问底层模型的参数?

python - 重命名 PySpark Dataframe 中的透视和聚合列

performance - Scala 中的并发处理

python - Spark 矩阵的基本线性代数

apache-spark - 将 "|"分隔的标题和列数据转换为 pyspark 中具有特定标题名称和数据行的单独列

apache-spark - 如何在 pyspark 中合并具有条件的两列?