mixins для Apache Beam DoFn с государственными аннотациями - PullRequest
0 голосов
/ 10 марта 2020

Есть ли способ смешать в черты DoFn, которые могут свободно определять свое собственное состояние и таймеры, не прибегая к макросам?

Для иллюстрации:

class Transform extends DoFn[I, O] with FeatureOne with FeatureTwo  {
  @ProcessElement
  def processElement(@StateId ..., @TimerId ...): Unit {
     doFeatureOne([feature one states and timers])
     doFeatureTwo([feature two states and timers])
  }
}

trait FeatureOne {
  @DoFn.StateId(...)
  val stateSpecOne: StateSpec[ValueState[One]] = ...

  def doFeatureOne([feature one states and timers]): Unit = ...
}

trait FeatureTwo {
  @DoFn.StateId(...)
  val stateSpecTwo: StateSpec[ValueState[Two]] = ...

  def doFeatureTwo([feature two states and timers]): Unit = ...
}

Похоже, что камнем преткновения этой попытки здесь является то, что processElement необходимо знать состояние / таймеры FeatureOne и FeatureTwo. Невозможно поменять местами различные реализации FeatureOne или FeatureTwo.

...