我正在测试一些基本的火花代码,其中我通过从数据源读取将数据帧转换为数据集。
import org.apache.spark.sql.SparkSession
object RunnerTest {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("SparkSessionExample")
.master("local[4]")
.config("spark.sql.warehouse.dir", "target/spark-warehouse")
.getOrCreate
case class Characters(name: String, id: Int)
import spark.implicits._
val path = "examples/src/main/resources/Characters.csv"
val peopleDS = spark.read.csv(path).as[Characters]
}
}
这是太简单的代码,但我得到编译错误说,
错误:(42,43)找不到Characters类型的编码器。需要一个隐式编码器[Characters]来存储数据集中的Characters实例。通过导入lark. int,支持原始类型(Int,String等)和产品类型(case类)。_支持序列化其他类型将在以后的版本中添加。val peopleDS=spark.read.csv(path).as[Characters]
不过,我使用的是Spark 2.4和sbr 2.12.8。
实际上这里的问题是案例类
在主对象
中。出于某种原因,火花不喜欢it.It是一个愚蠢的错误,但花了一段时间才弄清楚缺少了什么。一旦我将案例类
移出对象
,它就编译得很好。
import org.apache.spark.sql.SparkSession
case class Characters(name: String, id: Int)
object RunnerTest {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("SparkSessionExample")
.master("local[4]")
.config("spark.sql.warehouse.dir", "target/spark-warehouse")
.getOrCreate
import spark.implicits._
val path = "examples/src/main/resources/Characters.csv"
val peopleDS = spark.read.csv(path).as[Characters]
}
}