故障排除解决各种序列化导致的报错

故障排除解决各种序列化导致的报错

       当Spark作业在运行过程中报错,而且报错信息中含有Serializable等类似词汇,那么可能是序列化问题导致的报错。

       序列化问题要注意以下三点:

  1. 作为RDD的元素类型的自定义类,必须是可以序列化的;
  2. 算子函数里可以使用的外部的自定义变量,必须是可以序列化的;
  3. 不可以在RDD的元素类型、算子函数里使用第三方的不支持序列化的类型,例如Connection。

故障排除解决算子函数返回NULL导致的问题

在一些算子函数里,需要我们有一个返回值,但是在一些情况下我们不希望有返回值,此时我们如果直接返回NULL,会报错,例如Scala.Math(NULL)异常。

如果你遇到某些情况,不希望有返回值,那么可以通过下述方式解决:

  1. 返回特殊值,不返回NULL,例如“-1”;
  2. 在通过算子获取到了一个RDD之后,可以对这个RDD执行filter操作,进行数据过滤,将数值为-1的数据给过滤掉;
  3. 在使用完filter算子后,继续调用coalesce算子进行优化。

大数据培训

上一篇:Spark比拼Flink:下一代大数据计算引擎之争


下一篇:spark之RDD 系列01:RDD详解