我正在从文本文件中创建一个火花数据帧。说包含字符串的员工文件,int,char。
创建一个类:
case class Emp (
Name: String,
eid: Int,
Age: Int,
Sex: Char,
Sal: Int,
City: String)
使用Split创建RDD1,然后创建RDD2:
val textFileRDD2 = textFileRDD1.map(attributes => Emp(
attributes(0),
attributes(1).toInt,
attributes(2).toInt,
attributes(3).charAt(0),
attributes(4).toInt,
attributes(5)))
和最终rdds为:
finalRDD = textFileRDD2.toDF
创建最终RDD时会引发错误:
java.lang.unsupportedoperationException:没有为scala.char找到编码器。
任何人都可以帮助我解决为什么以及如何解决?
Spark SQL不为Char
提供Encoders
,而通用Encoders
不是很有用。
您可以使用StringType
:
attributes(3).slice(0, 1)
或ShortType
(或BooleanType
,ByteType
,如果您仅接受二进制响应):
attributes(3)(0) match {
case 'F' => 1: Short
...
case _ => 0: Short
}