gpt4 book ai didi

scala - 仅当在 main 方法之外定义 case 类以创建 Dataset[case class] 或 Dataframe[case class] 时才工作

转载 作者:行者123 更新时间:2023-12-03 21:24:04 30 4
gpt4 key购买 nike

这是有效的。

object FilesToDFDS {
case class Student(id: Int, name: String, dept:String)
def main(args: Array[String]): Unit = {
val ss = SparkSession.builder().appName("local").master("local[*]").getOrCreate()
import ss.implicits._

val path = "data.txt"
val rdd = ss.sparkContext.textFile(path).map(x => x.split(" ")).map(x => Student(x(0).toInt,x(1),x(2)))
val df = ss.read.format("csv").option("delimiter", " ").load(path).map(x => Student(x.getString(0).toInt ,x.getString(1),x.getString(2)))
val ds = ss.read.textFile(path).map(x => x.split(" ")).map(x => Student(x(0).toInt,x(1),x(2)))

val rddToDF = ss.sqlContext.createDataFrame(rdd)

}
}

但是,如果 case 类移动到 main 中, df , ds给出编译错误。
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.

rddToDF给出这个编译错误 No TypeTag available for Student
在这个问题 ques1 , ques2人回答搬家 case class外面 main .这个想法奏效了。但是,为什么它仅在 case class 时才起作用移到主要方法之外?

最佳答案

我相信如果在另一个类中定义了一个案例类,那么它需要该类的一个实例才能正常工作。在这种情况下,如果您输入 Student在 main 中的类,那么你需要类似 FilesToDFDS.Student 的东西使其工作。

关于scala - 仅当在 main 方法之外定义 case 类以创建 Dataset[case class] 或 Dataframe[case class] 时才工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686906/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com