Как обращаться с кодерами для пользовательского класса - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь запустить простой код SCIO.

case class Foo(first: String, second: String, third: String)

Попытка использовать Foo в SCollection приводит к ошибке:

Cannot find an implicit Coder instance for type:

  >> (String, my.Foo)
...
<redacted prose>
...

Есть много написано в сообщении об ошибке. Кажется, я не могу сказать asp, хотя весь этот текст предоставляет какую-либо информацию о том, что я должен делать с Кодерами для решения этой проблемы.

Может кто-нибудь пролить свет на то, как можно решить эту проблему.

Бонусные баллы за неиспользование последствий .

1 Ответ

0 голосов
/ 17 марта 2020

Вот минималистичный c пример

case class DemoEvents (reverse_geo_code_failed:String
                         ,eventType:String
                         ,city:String
                         ,area:String
                        )

class DoFnExample extends DoFn [String, DemoEvents]{
    // `@ProcessElement` is called once per element.
    @ProcessElement
    private[example] def processElement(c: DoFn[String, DemoEvents]#ProcessContext): Unit ={
      //val t = DemoEvents("BNG1111","pickup","ORR","1111")
      implicit val formats: DefaultFormats.type = DefaultFormats
      c.output(parse(c.element()).extract[DemoEvents])

    }
  }

val eventStream: SCollection[String] = sc.pubsubSubscription[String](args("pubsub-subscription-name"))
      .withFixedWindows(Duration.standardSeconds(120L))

val events: SCollection[DemoEvents] = eventStream.applyTransform(ParDo.of(new DoFnExample()))
...