Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-35180

Instant in row doesn't convert to correct type in python thread mode

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • API / Python
    • None

    Description

      from pyflink.datastream import StreamExecutionEnvironment
      from pyflink.common import Types, WatermarkStrategy, Configuration
      from pyflink.table import EnvironmentSettings, TableEnvironment
      from pyflink.table import StreamTableEnvironment, Schema
      from pyflink.datastream.functions import ProcessFunction, MapFunction
      
      # init task env
      config = Configuration()
      # config.set_string("python.execution-mode", "thread")
      config.set_string("python.execution-mode", "process")
      config.set_string("python.client.executable", "/root/miniconda3/bin/python3")
      config.set_string("python.executable", "/root/miniconda3/bin/python3")
      env = StreamExecutionEnvironment.get_execution_environment(config)
      table_env = StreamTableEnvironment.create(env)
      
      table = table_env.from_elements([(1, 'Hi'), (2, 'Hello')]).alias("id", "content")
      table_env.create_temporary_view("test_table", table)
      result_table = table_env.sql_query("select *, NOW() as dt from test_table")
      
      result_ds = table_env.to_data_stream(result_table)
      def test_func(row):
          print(row)
          return row
      
      result_ds.map(test_func)
      env.execute()

      output in process mode:

      Row(id=1, content='Hi', dt=Instant<1713609386, 271000000>)
      Row(id=2, content='Hello', dt=Instant<1713609386, 580000000>) 

      output in thread mode:

       
      Row(id=1, content='Hi', dt=<pemja.PyJObject object at 0x7f113dc92f10>)
      Traceback (most recent call last):
        File "/home/disk1/yuanwei/bug.py", line 31, in <module>
          env.execute()
        File "/root/miniconda3/lib/python3.10/site-packages/pyflink/datastream/stream_execution_environment.py", line 773, in execute
          return JobExecutionResult(self._j_stream_execution_environment.execute(j_stream_graph))
        File "/root/miniconda3/lib/python3.10/site-packages/py4j/java_gateway.py", line 1322, in {}call{}
          return_value = get_return_value(
        File "/root/miniconda3/lib/python3.10/site-packages/pyflink/util/exceptions.py", line 146, in deco
          return f(*a, **kw)
        File "/root/miniconda3/lib/python3.10/site-packages/py4j/protocol.py", line 326, in get_return_value
          raise Py4JJavaError(
      py4j.protocol.Py4JJavaError: An error occurred while calling o7.execute.
      : org.apache.flink.runtime.client.JobExecutionException: Job execution failed.
              at org.apache.flink.runtime.jobmaster.JobResult.toJobExecutionResult(JobResult.java:144)
              at org.apache.flink.runtime.minicluster.MiniClusterJobClient.lambda$getJobExecutionResult$3(MiniClusterJobClient.java:141)
              at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:616)
              at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:591)
              at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
              at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1975)
              at org.apache.flink.runtime.rpc.pekko.PekkoInvocationHandler.lambda$invokeRpc$1(PekkoInvocationHandler.java:268)
              at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
              at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
              at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
              at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1975)
              at org.apache.flink.util.concurrent.FutureUtils.doForward(FutureUtils.java:1267)
              at org.apache.flink.runtime.concurrent.ClassLoadingUtils.lambda$null$1(ClassLoadingUtils.java:93)
              at org.apache.flink.runtime.concurrent.ClassLoadingUtils.runWithContextClassLoader(ClassLoadingUtils.java:68)
              at org.apache.flink.runtime.concurrent.ClassLoadingUtils.lambda$guardCompletionWithContextClassLoader$2(ClassLoadingUtils.java:92)
              at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
              at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
              at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
              at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1975)
              at org.apache.flink.runtime.concurrent.pekko.ScalaFutureUtils$1.onComplete(ScalaFutureUtils.java:47)
              at org.apache.pekko.dispatch.OnComplete.internal(Future.scala:310)
              at org.apache.pekko.dispatch.OnComplete.internal(Future.scala:307)
              at org.apache.pekko.dispatch.japi$CallbackBridge.apply(Future.scala:234)
              at org.apache.pekko.dispatch.japi$CallbackBridge.apply(Future.scala:231)
              at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
              at org.apache.flink.runtime.concurrent.pekko.ScalaFutureUtils$DirectExecutionContext.execute(ScalaFutureUtils.java:65)
              at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:72)
              at scala.concurrent.impl.Promise$DefaultPromise.$anonfun$tryComplete$1(Promise.scala:288)
              at scala.concurrent.impl.Promise$DefaultPromise.$anonfun$tryComplete$1$adapted(Promise.scala:288)
              at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:288)
              at org.apache.pekko.pattern.PromiseActorRef.$bang(AskSupport.scala:629)
              at org.apache.pekko.pattern.PipeToSupport$PipeableFuture$$anonfun$pipeTo$1.applyOrElse(PipeToSupport.scala:34)
              at org.apache.pekko.pattern.PipeToSupport$PipeableFuture$$anonfun$pipeTo$1.applyOrElse(PipeToSupport.scala:33)
              at scala.concurrent.Future.$anonfun$andThen$1(Future.scala:536)
              at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)
              at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
              at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
              at org.apache.pekko.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:73)
              at org.apache.pekko.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:110)
              at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
              at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:85)
              at org.apache.pekko.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:110)
              at org.apache.pekko.dispatch.TaskInvocation.run(AbstractDispatcher.scala:59)
              at org.apache.pekko.dispatch.ForkJoinExecutorConfigurator$PekkoForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:57)
              at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
              at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
              at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
              at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)
      Caused by: org.apache.flink.runtime.JobException: Recovery is suppressed by NoRestartBackoffTimeStrategy
              at org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.handleFailure(ExecutionFailureHandler.java:176)
              at org.apache.flink.runtime.executiongraph.failover.flip1.ExecutionFailureHandler.getFailureHandlingResult(ExecutionFailureHandler.java:107)
              at org.apache.flink.runtime.scheduler.DefaultScheduler.recordTaskFailure(DefaultScheduler.java:285)
              at org.apache.flink.runtime.scheduler.DefaultScheduler.handleTaskFailure(DefaultScheduler.java:276)
              at org.apache.flink.runtime.scheduler.DefaultScheduler.onTaskFailed(DefaultScheduler.java:269)
              at org.apache.flink.runtime.scheduler.SchedulerBase.onTaskExecutionStateUpdate(SchedulerBase.java:764)
              at org.apache.flink.runtime.scheduler.SchedulerBase.updateTaskExecutionState(SchedulerBase.java:741)
              at org.apache.flink.runtime.scheduler.SchedulerNG.updateTaskExecutionState(SchedulerNG.java:83)
              at org.apache.flink.runtime.jobmaster.JobMaster.updateTaskExecutionState(JobMaster.java:488)
              at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.lang.reflect.Method.invoke(Method.java:498)
              at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.lambda$handleRpcInvocation$1(PekkoRpcActor.java:309)
              at org.apache.flink.runtime.concurrent.ClassLoadingUtils.runWithContextClassLoader(ClassLoadingUtils.java:83)
              at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.handleRpcInvocation(PekkoRpcActor.java:307)
              at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.handleRpcMessage(PekkoRpcActor.java:222)
              at org.apache.flink.runtime.rpc.pekko.FencedPekkoRpcActor.handleRpcMessage(FencedPekkoRpcActor.java:85)
              at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.handleMessage(PekkoRpcActor.java:168)
              at org.apache.pekko.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:33)
              at org.apache.pekko.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:29)
              at scala.PartialFunction.applyOrElse(PartialFunction.scala:127)
              at scala.PartialFunction.applyOrElse$(PartialFunction.scala:126)
              at org.apache.pekko.japi.pf.UnitCaseStatement.applyOrElse(CaseStatements.scala:29)
              at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:175)
              at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:176)
              at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:176)
              at org.apache.pekko.actor.Actor.aroundReceive(Actor.scala:547)
              at org.apache.pekko.actor.Actor.aroundReceive$(Actor.scala:545)
              at org.apache.pekko.actor.AbstractActor.aroundReceive(AbstractActor.scala:229)
              at org.apache.pekko.actor.ActorCell.receiveMessage(ActorCell.scala:590)
              at org.apache.pekko.actor.ActorCell.invoke(ActorCell.scala:557)
              at org.apache.pekko.dispatch.Mailbox.processMailbox(Mailbox.scala:280)
              at org.apache.pekko.dispatch.Mailbox.run(Mailbox.scala:241)
              at org.apache.pekko.dispatch.Mailbox.exec(Mailbox.scala:253)
              ... 4 more
      Caused by: pemja.core.PythonException: <class 'SystemError'>: <built-in function dumps> returned NULL without setting an exception
              at /root/miniconda3/lib/python3.10/site-packages/pyflink/fn_execution/embedded/operations.process_element(operations.py:93)
              at /root/miniconda3/lib/python3.10/site-packages/pyflink/fn_execution/embedded/operations._output_elements(operations.py:58)
              at /root/miniconda3/lib/python3.10/site-packages/pyflink/fn_execution/embedded/converters.to_external(converters.py:72)
              at pemja.core.object.PyIterator.next(Native Method)
              at pemja.core.object.PyIterator.hasNext(PyIterator.java:40)
              at org.apache.flink.streaming.api.operators.python.embedded.AbstractOneInputEmbeddedPythonFunctionOperator.processElement(AbstractOneInputEmbeddedPythonFunctionOperator.java:161)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.pushToOperator(CopyingChainingOutput.java:75)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:50)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:29)
              at org.apache.flink.table.runtime.operators.sink.OutputConversionOperator.processElement(OutputConversionOperator.java:105)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.pushToOperator(CopyingChainingOutput.java:75)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:50)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:29)
              at org.apache.flink.table.runtime.util.StreamRecordCollector.collect(StreamRecordCollector.java:44)
              at org.apache.flink.table.runtime.operators.sink.ConstraintEnforcer.processElement(ConstraintEnforcer.java:247)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.pushToOperator(CopyingChainingOutput.java:75)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:50)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:29)
              at StreamExecCalc$6.processElement(Unknown Source)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.pushToOperator(CopyingChainingOutput.java:75)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:50)
              at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:29)
              at org.apache.flink.streaming.api.operators.StreamSourceContexts$ManualWatermarkContext.processAndCollect(StreamSourceContexts.java:425)
              at org.apache.flink.streaming.api.operators.StreamSourceContexts$WatermarkContext.collect(StreamSourceContexts.java:520)
              at org.apache.flink.streaming.api.operators.StreamSourceContexts$SwitchingOnClose.collect(StreamSourceContexts.java:110)
              at org.apache.flink.streaming.api.functions.source.InputFormatSourceFunction.run(InputFormatSourceFunction.java:99)
              at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:114)
              at org.apache.flink.streaming.api.operators.StreamSource.run(StreamSource.java:71)
              at org.apache.flink.streaming.runtime.tasks.SourceStreamTask$LegacySourceFunctionThread.run(SourceStreamTask.java:338) 

      I thought it because Instant object not convert correctly in outputDataConverter, it should be convert to pyflink.common.time.Instant as same as in process mode.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              vonesec Wei Yuan
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated: