我需要解释以下Spark代码中发生的事情:
case class SchemaItem(getName:String, getType:String);
val schemaItemList = sc.textFile("/spark/personsMetadata.txt").
flatMap(line=>line.split(",")).map(
schemaItem=>SchemaItem(schemaItem.split("-")(0), schemaItem.split("-")(1))
).collect().toList;
当我在spark shell中运行此代码时,我收到了所创建的SchemaItems对象的预期List。
当我将SchemaItem案例类更改为常规类时,
1)我被要求使SchemaItem可序列化...好吧我将Serialmatem中的SchemaItem从@SerialVersionUID(15L)注释扩展到它。
2)第一个点之后的schemaItemList现在包含Driver程序中未反序列化的SchemaItems。是否有可能收到反序列化的Schemaitems?
或者这是否意味着我应该总是在工人中使用案例类?
答案 0 :(得分:1)
是的,自Spark 1.6以来,Spark支持自动生成各种类型的编码器,包括基本类型(例如String,Integer,Long),Scala案例类和Java Bean。
为了避免麻烦,建议使用案例类。