在RDD.map项

时间:2017-07-09 21:46:05

标签: apache-spark apache-spark-sql spark-dataframe

我需要解释以下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?

或者这是否意味着我应该总是在工人中使用案例类?

1 个答案:

答案 0 :(得分:1)

是的,自Spark 1.6以来,Spark支持自动生成各种类型的编码器,包括基本类型(例如String,Integer,Long),Scala案例类和Java Bean。

为了避免麻烦,建议使用案例类。