我是Spark 2.0的新用户,并且在我们的代码库中使用数据集。我有点注意到我们需要在我们的代码中无处不在。例如:用于导入各处火花隐含的解决方法
File A
class A {
def job(spark: SparkSession) = {
import spark.implcits._
//create dataset ds
val b = new B(spark)
b.doSomething(ds)
doSomething(ds)
}
private def doSomething(ds: Dataset[Foo], spark: SparkSession) = {
import spark.implicits._
ds.map(e => 1)
}
}
File B
class B(spark: SparkSession) {
def doSomething(ds: Dataset[Foo]) = {
import spark.implicits._
ds.map(e => "SomeString")
}
}
我想问问是什么,如果有一个更清洁的方式来能够做到
ds.map(e => "SomeString")
不导入implicits在每一个功能,我做的地图吗?如果我不进口的话,我得到以下错误:
Error:(53, 13) Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases.
更新了我的答案并附加了一些信息。不要犹豫,问你是否有任何后续问题。 – Shaido