什么时候应该/不应该在Spark中序列化一个类?

时间:2015-08-19 01:38:46

标签: serialization apache-spark

我有一个类从HDFS中的文件读取并尝试从中创建图形。我在类初始化中对文件进行了一些转换,除非我使类可序列化。

class GraphLoader(path:String, sc:SparkContext)
  extends java.io.Serializable {

  val records = sc.textFile(path).map(x => x.split(",")).filter(x => x(0) == "1" || x(0) == "2")
  records.cache()

  val people:RDD[(Long,PersonProperty)] = records.
    flatMap(line => List(line(1).safeToLong, line(4).safeToLong)).
    map(number => (number, PersonProperty("default")))
...

.safeToLong基本上是我在隐式类中定义的方法,我用它将字符串转换为Longs并处理我遇到的任何异常。

如果没有Seri​​alizable扩展程序它将无法运行,我会感到烦恼,因为我觉得这是一个非常重要的事情。是否有更好/更优雅的方式来做到这一点?

1 个答案:

答案 0 :(得分:1)

Spark是分布式(集群)计算的引擎,它本身需要不同节点(JVM)之间的通信。这种通信反过来需要序列化,因为每次类或对象离开它的JVM时,它都必须被序列化。

最重要的是,您编写的大多数Spark代码都需要可序列化。任何代码都不能利用Spark的分布式特性。您应该tune序列化来优化您的Spark应用程序。