【问题标题】:Transform a dataframe to a dataset using case class spark scala使用案例类 spark scala 将数据框转换为数据集
【发布时间】:2020-06-16 03:44:19
【问题描述】:

我编写了以下代码,旨在使用案例类将数据框转换为数据集

def toDs[T](df: DataFrame): Dataset[T] = {
    df.as[T]
  } 

然后case class DATA( name:String, age:Double, location:String)

我得到:

Unable to find encoder for type stored in a Dataset.  Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._  Support for serializing other types will be added in future releases.
[error]     df.as[T]

知道如何解决这个问题

【问题讨论】:

标签: scala apache-spark dataset


【解决方案1】:

您可以通过以下两种方式将数据读入Dataset[MyCaseClass]:

假设您有以下课程:case class MyCaseClass

1) 第一种方式:在作用域中导入 sparksession 隐式并使用 as 运算符将您的 DataFrame 转换为 Dataset[MyCaseClass]:

case class MyCaseClass

val spark: SparkSession = SparkSession.builder.enableHiveSupport.getOrCreate()

import spark.implicits._

val ds: Dataset[MyCaseClass]= spark.read.format("FORMAT_HERE").load().as[MyCaseClass]

2) 您可以在另一个对象中创建自己的编码器并将它们导入您当前的代码中

package com.funky.package

import org.apache.spark.sql.{Encoder, Encoders}

case class MyCaseClass

object MyCustomEncoders{

 implicit val mycaseClass:Encoder[MyCaseClass] = Encoders.product[MyCaseClass]

}

在包含main方法的文件中,导入上面的隐式值

import com.funky.package.MyCustomEncoders
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.Dataset

val spark: SparkSession = SparkSession.builder.enableHiveSupport.getOrCreate()   

val ds: Dataset[MyCaseClass]= spark.read.format("FORMAT_HERE").load().as[MyCaseClass]

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多