Github user feynmanliang commented on a diff in the pull request: https://github.com/apache/spark/pull/11374#discussion_r85647470 --- Diff: mllib/src/main/scala/org/apache/spark/mllib/api/python/PythonMLLibAPI.scala --- @@ -1358,6 +1363,41 @@ private[spark] abstract class SerDeBase { } }.toJavaRDD() } + + /** + * Convert a DStream of Java objects to a DStream of serialized Python objects, that is usable by + * PySpark. + */ + def javaToPython(jDStream: JavaDStream[Any]): JavaDStream[Array[Byte]] = { + val dStream = jDStream.dstream.mapPartitions { iter => + initialize() // let it called in executor + new SerDeUtil.AutoBatchedPickler(iter) + } + new JavaDStream[Array[Byte]](dStream) + } + + /** + * Convert a DStream of serialized Python objects to a DStream of objects, that is usable by + * PySpark. + */ + def pythonToJava(pyDStream: JavaDStream[Array[Byte]], batched: Boolean): JavaDStream[Any] = { + val dStream = pyDStream.dstream.mapPartitions { iter => + initialize() // let it called in executor + val unpickle = new Unpickler + iter.flatMap { row => + val obj = unpickle.loads(row) + if (batched) { + obj match { + case list: JArrayList[_] => list.asScala + case arr: Array[_] => arr + } + } else { + Seq(obj) + } + } + } + new JavaDStream[Any](dStream) --- End diff -- No need for this constructor, just return `dStream` (in fact, don't even need the `dStream` variable)
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org