class_docstr: A Discretized Stream (DStream), the basic abstraction in Spark Streaming,
  is a continuous sequence of RDDs (of the same type) representing a
  continuous stream of data (see :class:`RDD` in the Spark core documentation
  for more details on RDDs).
  
  DStreams can either be created from live data (such as, data from TCP
  sockets, etc.) using a :class:`StreamingContext` or it can be
  generated by transforming existing DStreams using operations such as
  `map`, `window` and `reduceByKeyAndWindow`. While a Spark Streaming
  program is running, each DStream periodically generates a RDD, either
  from live data or by transforming the RDD generated by a parent DStream.
  
  DStreams internally is characterized by a few basic properties:
   - A list of other DStreams that the DStream depends on
   - A time interval at which the DStream generates an RDD
   - A function that is used to generate an RDD after each time interval
class_docstr_tok: ["A","Discretized","Stream","(","DStream",")",",","the","basic","abstraction","in","Spark","Streaming",",","is","a","continuous","sequence","of","RDDs","(","of","the","same","type",")","representing","a","continuous","stream","of","data","(","see",":","class",":","`","RDD","`","in","the","Spark","core","documentation","for","more","details","on","RDDs",")",".","DStreams","can","either","be","created","from","live","data","(","such","as",",","data","from","TCP","sockets",",","etc",".",")","using","a",":","class",":","`","StreamingContext","`","or","it","can","be","generated","by","transforming","existing","DStreams","using","operations","such","as","`","map","`",",","`","window","`","and","`","reduceByKeyAndWindow","`",".","While","a","Spark","Streaming","program","is","running",",","each","DStream","periodically","generates","a","RDD",",","either","from","live","data","or","by","transforming","the","RDD","generated","by","a","parent","DStream",".","DStreams","internally","is","characterized","by","a","few","basic","properties",":","-","A","list","of","other","DStreams","that","the","DStream","depends","on","-","A","time","interval","at","which","the","DStream","generates","an","RDD","-","A","function","that","is","used","to","generate","an","RDD","after","each","time","interval"]
docstr: Return a new DStream in which each RDD is generated by applying a function
  on each RDD of this DStream and 'other' DStream.
  
  `func` can have two arguments of (`rdd_a`, `rdd_b`) or have three
  arguments of (`time`, `rdd_a`, `rdd_b`)
docstr_tok: ["Return","a","new","DStream","in","which","each","RDD","is","generated","by","applying","a","function","on","each","RDD","of","this","DStream","and","'other","'","DStream",".","`","func","`","can","have","two","arguments","of","(","`","rdd_a","`",",","`","rdd_b","`",")","or","have","three","arguments","of","(","`","time","`",",","`","rdd_a","`",",","`","rdd_b","`",")"]
code: def transformWith(
      self: "DStream[T]",
      func: Union[
          Callable[[RDD[T], RDD[U]], RDD[V]],
          Callable[[datetime, RDD[T], RDD[U]], RDD[V]],
      ],
      other: "DStream[U]",
      keepSerializer: bool = False,
  ) -> "DStream[V]":
      """
      Return a new DStream in which each RDD is generated by applying a function
      on each RDD of this DStream and 'other' DStream.
  
      `func` can have two arguments of (`rdd_a`, `rdd_b`) or have three
      arguments of (`time`, `rdd_a`, `rdd_b`)
      """
      if func.__code__.co_argcount == 2:
          oldfunc = func
  
          def func(_: datetime, a: RDD[T], b: RDD[U]) -> RDD[V]:
              return oldfunc(a, b)  # type: ignore[call-arg, arg-type]
  
      assert (
          func.__code__.co_argcount == 3
      ), "func should take two or three arguments"
      jfunc = TransformFunction(
          self._sc,
          func,
          self._jrdd_deserializer,
          other._jrdd_deserializer,
      )
      assert self._sc._jvm is not None
      dstream = self._sc._jvm.PythonTransformed2DStream(
          self._jdstream.dstream(), other._jdstream.dstream(), jfunc
      )
      jrdd_serializer = (
          self._jrdd_deserializer
          if keepSerializer
          else self._sc.serializer
      )
      return DStream(
          dstream.asJavaDStream(), self._ssc, jrdd_serializer
      )
  
imports: import operator
  import time
  from itertools import chain
  from datetime import datetime
  from typing import Any, Callable, Generic, Hashable, Iterable, List, Optional, Tuple, TypeVar, Union, TYPE_CHECKING, cast, overload
  from py4j.protocol import Py4JJavaError
  from py4j.java_gateway import JavaObject
  from pyspark.storagelevel import StorageLevel
  from pyspark.streaming.util import rddToFileName, TransformFunction
  from pyspark.rdd import portable_hash, RDD
  from pyspark.resultiterable import ResultIterable
label_desc: Use image node_id 31 for calling the DStream obj's underlying member method code with example usage: obj.transformWith(func, other, keepSerializer) and returns: DStream, oldfunc