我试图在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)
}
答案 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的一个例子。 检查您的案例类是否是顶级对象(并且未在方法内声明)