code: def transformWith(self, func, other, keepSerializer=False):
          
          if func.__code__.co_argcount == 2:
              oldfunc = func
              func = lambda t, a, b: oldfunc(a, b)
          assert func.__code__.co_argcount == 3, "func should take two or three arguments"
          jfunc = TransformFunction(self._sc, func, self._jrdd_deserializer, other._jrdd_deserializer)
          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)
docs: 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`)