首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标识哪个对象在Apache-Flink中不可序列化

标识哪个对象在Apache-Flink中不可序列化
EN

Stack Overflow用户
提问于 2018-08-27 16:45:43
回答 1查看 925关注 0票数 0

我正在编写一个Flink转换器,并且我有一个自定义对象Histogram,它具有以下属性:

代码语言:javascript
复制
case class Histogram(
  nRows: Int,
  nCols: Int,
  min: Int,
  step: Double,
  private val countMatrix: Array[ArrayBuffer[Double]],
  private val cutMatrixL1: Array[ArrayBuffer[Double]],
  val distribMatrixL1: Array[ArrayBuffer[Map[Int, Double]]],
  private val distribMatrixL2: Array[ArrayBuffer[Map[Int, Double]]],
  private val cutMatrixL2: ArrayBuffer[ArrayBuffer[Double]])
  extends Serializable {
    ???
}

这是我的FitOperation

代码语言:javascript
复制
implicit val fitOp = new FitOperation[PIDiscretizerTransformer, LabeledVector] {
    override def fit(
                      instance: PIDiscretizerTransformer,
                      fitParameters: ParameterMap,
                      input: DataSet[LabeledVector]): Unit = {

      // get params...

      val metric = input.map { x ⇒
        // (instance, histrogram totalCount)
        (x, Histogram(nAttrs, l1InitialBins, min, instance.step), 1)
      }.reduce { (m1, m2) ⇒
        // Update Layer 1
        val updatedL1 = updateL1(m1._1, m1._2, instance.step, initialElems, alpha, m1._3)

        //         Update Layer 2 if neccesary
        val updatedL2 = if (m1._3 % l2updateExamples == 0) {
          updateL2(m1._1, updatedL1)
        } else updatedL1

        (m2._1, updatedL2, m1._3 + 1)
      }.map(_._2)

      //      instance.metricsOption = Some(metric)
    }
  }

这可以很好地工作,但是如果我取消注释最后一行:instance.metricsOption = Some(metric),我会得到一个java.io.NotSerializableException: org.apache.flink.api.scala.DataSet

我怎样才能找到我的类Histogram中的哪个对象导致了这个问题?据我所知,ArrayBuffer是可序列化的,Map也是。尽管我发现了这个问题:

Map can not be serializable in scala?

这说明.mapValues是不可序列化的,但我并没有使用.mapValues anywhere。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-30 21:40:50

问题是您在MapFunction中引用了instance.stepinstance的类型为PIDiscretizerTransformer,无法序列化。因此,您需要在MapFunction之外计算步长,并将值传递给函数。那么你的程序应该是可序列化的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52035602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档