无法在Spark Scala中找到存储在数据集中的类型的编码器

时间:2018-04-12 04:55:13

标签: scala apache-spark

我试图在Spark中执行以下简单示例。但是,我收到了以下错误

  

“无法找到org.apache.spark.sql.Encoder [mydata]类型的证据参数的隐含值”

我该如何解决这个问题?

 import org.apache.spark.sql._
 import org.apache.spark.ml.clustering._
 import org.apache.spark.ml.feature.VectorAssembler


 case class mydata(ID: Int,Salary: Int)

 object SampleKMeans {

 def main(args: Array[String]) = {

  val spark = SparkSession.builder
            .appName("SampleKMeans")
            .master("yarn")
            .getOrCreate()

  import spark.implicits._
  val ds = spark.read
           .option("header","true")
           .option("inferSchema","true")
           .csv("data/mydata.csv")
           .as[mydata]

   val assembler = new VectorAssembler()
               .setInputCols(Array("Salary"))
               .setOutputCol("SalaryOut")
   val a = assembler.transform(ds)
   }

3 个答案:

答案 0 :(得分:1)

我明确指定架构后错误消失了。谢谢大家帮助我。

  val ds = spark.read
     .schema("Int","Int")
     .option("header","true")
     .csv("data/mydata.csv").as[mydata]

答案 1 :(得分:0)

您需要提供架构信息。

case class mydata(ID: Int,Salary: Int)

val schema = StructType(Array(
  StructField("ID", IntegerType, false),
  StructField("Salary", IntegerType, false)))

在main方法中提供上面的代码。

您对CSV的阅读请求

spark.read.schema(schema).csv("path").as[mydata]

有了这个,你可以使用剩下的代码。

希望这有帮助!

答案 2 :(得分:0)

您提供的示例适用于Spark 2.2.0。我想这不是你试图运行的代码,而只是stackoverflow的一个例子。 检查您的案例类是否是顶级对象(并且未在方法内声明)