[英]I am getting error saying No implicit argument of type:Encoder[ ]" in Spark
I get an error saying No implicit argument of type:Encoder[Movies] can you please tell me where am I going wrong as I am new to spark.我收到一条错误消息,说没有类型的隐式参数:Encoder[Movies] 你能告诉我我哪里出错了,因为我是 Spark 的新手。
I am trying to read a movies file and converting it to a data set having 1 'ID' column and 2nd 'names of the movie' column.我正在尝试读取电影文件并将其转换为具有 1 个“ID”列和第二个“电影名称”列的数据集。
import org.apache.spark.sql.SparkSession
object Practice {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("dataFrameExample")
.master("local")
.getOrCreate()
**case class Movies( ID:String, name:String)**
val ds1 = spark.read
.format("text")
.option("header", "true") //first line in file has headers
.load("C:\\SparkScala\\SparkScalaStudy\\movies").as[Movies]
ds1.printSchema()
}
}
您需要将case class Movies
移出main
函数,并在ds1
之前添加import spark.implicits._
You can import the sparksession.implicits to solve the problem or you can write your own implicits in an object as follows:您可以导入 sparksession.implicits 来解决问题,也可以按如下方式在对象中编写自己的隐式:
import org.apache.spark.sql.{Encoder, Encoders}
object CustomImplicits {
implicit val movieEncoder: Encoder[Movies] = Encoders.product[Movies]
}
Then simply import the implicit in your main method:然后只需在您的主要方法中导入隐式:
import package.containinig.implicits.CustomImplicits._
import org.apache.spark.sql.SparkSession
object Practice {
def main(args: Array[String]): Unit = {
val spark = SparkSession
.builder()
.appName("dataFrameExample")
.master("local")
.getOrCreate()
val ds1 = spark.read
.format("text")
.option("header", "true") //first line in file has headers
.load("C:\\SparkScala\\SparkScalaStudy\\movies").as[Movies]
ds1.printSchema()
}
}
Using the Encoders, you can enforce the Schema on your dataset as it would raise appropriate errors if the Schema is violated.使用编码器,您可以在数据集上强制执行架构,因为如果架构被违反,它会引发适当的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.