我编写了一个python UDF,它使用以前定义的python函数而不是lambda(UDF的标准输入)。当代码在jupyter笔记本中执行时,这似乎会导致奇怪的导入错误(例如,调用df.show()或df.collect())
代码的结构很简单(例如,在src/src_code.py中)
class MyClass(pyspark.ml.Transformer):
def __init__(self, inputCol, outputCol, extra_arg):
self.inputCol=inputCol
self.outputCol=outputCol
self.extra_arg=extra_arg
def _transform(self, dataset):
dataset = dataset.withColumn(self.inputCol, F.udf(lambda x: example_python_fn(x,
self.extra_arg))(F.col(self.inputCol)))
def example_python_fn(self, x, extra_arg):
return x + extra_arg
我尝试使用函数调用而不是lambda,因为我想将两个变量传递到函数中,这似乎是最干净的方法
我可以将这个类导入jupyter笔记本。但是当我出于某种原因运行代码时 尝试导入函数(可能在其中一个执行器上)。这将导致错误 如下所示:
line 172, in _read_with_length
return self.loads(obj)
File "/opt/anaconda/lib/python3.6/site-packages/pyspark/python/lib/pyspark.zip/pyspark/serializers.py", line 580, in loads
return pickle.loads(obj, encoding=encoding)
ModuleNotFoundError: No module named 'src'
如果我将此代码直接复制到jupyter笔记本中(而不是将其保留在src中),那么代码就可以完美地工作。但我真的不想这么做,因为这太乱了。提前谢谢你的帮助
目前没有回答
相关问题 更多 >
编程相关推荐