jingz-db commented on code in PR #49156:
URL: https://github.com/apache/spark/pull/49156#discussion_r1902215696
##########
sql/core/src/main/scala/org/apache/spark/sql/execution/python/TransformWithStateInPandasPythonRunner.scala:
##########
@@ -238,7 +223,108 @@ abstract class
TransformWithStateInPandasPythonBaseRunner[I](
super.compute(inputIterator, partitionIndex, context)
}
- private def closeServerSocketChannelSilently(stateServerSocket:
ServerSocket): Unit = {
+ override protected def writeUDF(dataOut: DataOutputStream): Unit = {
+ PythonUDFRunner.writeUDFs(dataOut, funcs, argOffsets, None)
+ }
+}
+
+/**
+ * TransformWithStateInPandas driver side Python runner. Similar as executor
side runner,
+ * will start a new daemon thread on the Python runner to run state server.
+ */
+class TransformWithStateInPandasPythonPreInitRunner(
+ func: PythonFunction,
+ workerModule: String,
+ timeZoneId: String,
+ groupingKeySchema: StructType,
+ processorHandleImpl: DriverStatefulProcessorHandleImpl)
+ extends StreamingPythonRunner(func, "", "", workerModule)
+ with TransformWithStateInPandasPythonRunnerUtils
+ with Logging {
+ protected val sqlConf = SQLConf.get
+
+ private var dataOut: DataOutputStream = _
+ private var dataIn: DataInputStream = _
+
+ private var daemonThread: Thread = _
+
+ override def init(): (DataOutputStream, DataInputStream) = {
+ val result = super.init()
+ dataOut = result._1
+ dataIn = result._2
+
+ // start state server, update socket port
+ startStateServer()
+ (dataOut, dataIn)
+ }
+
+ def process(): Unit = {
+ // Also write the port number for state server
+ dataOut.writeInt(stateServerSocketPort)
+ PythonWorkerUtils.writeUTF(groupingKeySchema.json, dataOut)
+ dataOut.flush()
+
+ val resFromPython = dataIn.readInt()
+ if (resFromPython != 0) {
+ val errMessage = PythonWorkerUtils.readUTF(dataIn)
+ throw streamingPythonRunnerInitializationFailure(resFromPython,
errMessage)
+ }
+ }
+
+ override def stop(): Unit = {
+ super.stop()
+ closeServerSocketChannelSilently(stateServerSocket)
+ daemonThread.stop()
Review Comment:
Thanks for the reminding! I'll resolve this and send out a followup PR next
week.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]