Spark给我一个编译时错误
Error:(49, 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 sqlContext.implicits._ Support for serializing other types will be added in future releases.
.map(line => line.split(delimiter))
^
以下代码
val digital2 = sqlContext.read.text("path").as[String]
.map(line => line.split(delimiter))
.map(lineSplit => {
new MyType(lineSplit(0), lineSplit(1), lineSplit(2), lineSplit(3)
, lineSplit(4).toInt, lineSplit(5).toInt, lineSplit(6).toInt, lineSplit(7).toInt
)
})
但是这段代码很好用
val digital = sqlContext.read.text("path").as[String]
.map(line => {
val lineSplit = line.split(delimiter)
new MyType(lineSplit(0), lineSplit(1), lineSplit(2), lineSplit(3)
, lineSplit(4).toInt, lineSplit(5).toInt, lineSplit(6).toInt, lineSplit(7).toInt
)
}
我不跟踪发生的事情。有人可以解释一下吗?
答案 0 :(得分:2)
在第一个示例中,.map(line => line.split(delimiter))
将返回Dataset[Array[String]]
。然后它需要Dataset[Array[String]]
的编码器。但是,在1.6.1中增加了这种编码器。因此,如果您使用旧的Spark版本,则无法编译。