gpt4 book ai didi

scala - 将案例类与 List 一起使用时,Dataframe.rdd.count 抛出找不到实际参数适用的构造函数/方法

转载 作者:行者123 更新时间:2023-12-02 12:47:35 25 4
gpt4 key购买 nike

我正在使用 Spark 2.1.0,并且还在 2.1.1 上检查了此场景。这对我来说很奇怪,似乎是序列化问题。我正在使用包含 scala 列表的案例类,并且遇到以下错误:

Executor task launch worker for task 1] [CodeGenerator.logError]: failed to compile: org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 111, Column 64: No applicable constructor/method found for actual parameters "scala.collection.Seq"; candidates are: "com.minute.playground.WithList(scala.collection.immutable.List)"

/* 001 */

我创建了一个简短的示例代码来说明问题

import org.apache.spark.sql.{Dataset, SparkSession}
case class Simple(str: String)
case class WithList(list : List[String])
object RddCountFailOnCaseClassWithList {

def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("WhyLikeThis").master("local[2]").enableHiveSupport.getOrCreate
import spark.implicits._
val df1: Dataset[Simple] = spark.sqlContext.createDataFrame[Simple](List(new Simple("1"))).as[Simple]
df1.show()
println(df1.rdd.count())

val df2: Dataset[WithList] = spark.sqlContext.createDataFrame[WithList](List(new WithList(List("1")))).as[WithList]
df2.show()
//This will fail !!! ? But why ?
println(df2.rdd.count())
}
}

我做错了什么?我不应该在模型中使用 List 吗?

最佳答案

看起来像一个错误:)你没有做错什么。看起来 List 在某处转换为 Seq 并且代码生成器找不到所需的构造函数。不过,您的代码适用于 Spark 2.2.0,因此已修复。

如果您想使用spark 2.1.0,您可以尝试将您的实现更改为

import org.apache.spark.sql.{Dataset, SparkSession}

case class Simple(str: String)

case class WithSeq(list: Seq[String])

object RddCountFailOnCaseClassWithList {

def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("WhyLikeThis").master("local[2]").enableHiveSupport.getOrCreate
import spark.implicits._
val df1: Dataset[Simple] = {
spark.sqlContext.createDataFrame[Simple](List(Simple("1"))).as[Simple]
}
df1.show()
println(df1.rdd.count())

val df2: Dataset[WithSeq] = spark.sqlContext.createDataFrame[WithSeq](List(WithSeq(List("1")))).as[WithSeq]
df2.show()
//hooray, it works! :)
println(df2.rdd.count())
}
}

关于scala - 将案例类与 List 一起使用时,Dataframe.rdd.count 抛出找不到实际参数适用的构造函数/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889889/

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