我经常在ipython笔记本中重复使用udfs,并试图找出是否有某种方式来共享代码。
我希望能够创建一个文件,让我们称之为sparktoolz.py
import pyspark.sql.functions as F
import pyspark.sql.types as T
def myfunc(foo):
# do stuff to foo
return transformed_foo
myfunc_udf = F.udf(myfunc, T.SomeType())
然后从与sparktoolz.py
相同的目录中的任何给定笔记本执行以下操作:
from pyspark import SparkContext
from pyspark.sql import SQLContext
sc = SparkContext()
sqlContext = SQLContext(sc)
sc.addPyFile('sparktoolz.py')
from sparktoolz import myfunc_udf
df = sqlContext.read.parquet('path/to/foo')
stuff = df.select(myfunc_udf(F.col('bar')))
每当我尝试这样的事情时,笔记本都会找到sparktoolz.py
,但会给我一个ImportError: cannot import name myfunc_udf
。