def using(self, operator, types): """ Finalizes a Join transformation. Applies a JoinFunction to each pair of joined elements. Each JoinFunction call returns exactly one element. :param operator:The JoinFunction that is called for each pair of joined elements. :param types: :return:An Set that represents the joined result DataSet. """ if isinstance(operator, TYPES.FunctionType): f = operator operator = JoinFunction() operator.join = f self._info[_Fields.OPERATOR] = operator self._info[_Fields.META] = str(inspect.getmodule(operator)) + "|" + str(operator.__class__.__name__) self._info[_Fields.TYPES] = types self._info[_Fields.NAME] = "PythonJoin" if self._info[_Fields.DISCARD1]: operator._discard_key1 = True if self._info[_Fields.DISCARD2]: operator._discard_key2 = True self._env._sets.append(self._info) return OperatorSet(self._env, OperationInfo(self._env, self._info))