Apache Beam Python SDK сбой с IllegalArgumentException - PullRequest
0 голосов
/ 09 октября 2018
java.lang.IllegalArgumentException: FakeKeyedWorkItemCoder only works with KeyedWorkItemCoder or KvCoder; was: class org.apache.beam.sdk.coders.LengthPrefixCoder
    com.google.cloud.dataflow.worker.WindmillKeyedWorkItem$FakeKeyedWorkItemCoder.<init>(WindmillKeyedWorkItem.java:211)
    com.google.cloud.dataflow.sdk.util.TimerOrElement$TimerOrElementCoder.<init>(TimerOrElement.java:53)
    com.google.cloud.dataflow.sdk.util.TimerOrElement$TimerOrElementCoder.of(TimerOrElement.java:57)
    com.google.cloud.dataflow.sdk.util.TimerOrElement$TimerOrElementCloudObjectTranslator.fromCloudObject(TimerOrElement.java:85)
    com.google.cloud.dataflow.sdk.util.TimerOrElement$TimerOrElementCloudObjectTranslator.fromCloudObject(TimerOrElement.java:67)
    org.apache.beam.runners.dataflow.util.CloudObjects.coderFromCloudObject(CloudObjects.java:87)
    org.apache.beam.runners.dataflow.util.CloudObjectTranslators.getComponents(CloudObjectTranslators.java:71)
    org.apache.beam.runners.dataflow.util.CloudObjectTranslators.access$100(CloudObjectTranslators.java:51)
    org.apache.beam.runners.dataflow.util.CloudObjectTranslators$6.fromCloudObject(CloudObjectTranslators.java:248)
    org.apache.beam.runners.dataflow.util.CloudObjectTranslators$6.fromCloudObject(CloudObjectTranslators.java:237)
    org.apache.beam.runners.dataflow.util.CloudObjects.coderFromCloudObject(CloudObjects.java:87)
    com.google.cloud.dataflow.worker.BeamFnMapTaskExecutorFactory$5.typedApply(BeamFnMapTaskExecutorFactory.java:593)
    com.google.cloud.dataflow.worker.BeamFnMapTaskExecutorFactory$5.typedApply(BeamFnMapTaskExecutorFactory.java:587)
    com.google.cloud.dataflow.worker.graph.Networks$TypeSafeNodeFunction.apply(Networks.java:63)
    com.google.cloud.dataflow.worker.graph.Networks$TypeSafeNodeFunction.apply(Networks.java:50)
    com.google.cloud.dataflow.worker.graph.Networks.replaceDirectedNetworkNodes(Networks.java:87)
    com.google.cloud.dataflow.worker.BeamFnMapTaskExecutorFactory.create(BeamFnMapTaskExecutorFactory.java:136)
    com.google.cloud.dataflow.worker.StreamingDataflowWorker.process(StreamingDataflowWorker.java:1143)
    com.google.cloud.dataflow.worker.StreamingDataflowWorker.access$1000(StreamingDataflowWorker.java:136)
    com.google.cloud.dataflow.worker.StreamingDataflowWorker$6.run(StreamingDataflowWorker.java:966)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    java.lang.Thread.run(Thread.java:745)

Ошибка трассировки выше, конвейер отлично работает на моем локальном компьютере, но выходит из строя на обработчике потока данных с вышеприведенной ошибкой, для которой я не смог найти нигде соответствующей информации.
Подробности: чтение из Pubsub -> 120Окно секунд -> группировать по ключу -> вставить в bigquery

1 Ответ

0 голосов
/ 10 октября 2018

Ошибка была в том, что ключ, значение в pcoll было из другого класса.Хотя я возвращал строку, она все равно давала ошибку.Добавление функции в том же классе, что и конвейер, для получения ввода перед groupbykey и вывода того же элемента сработало.

...