Pyspark -创建我们的python包

txu3uszq  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(140)

在Synpase笔记本中,我有一个单独的笔记本,其中包含了我需要在另一个笔记本中运行的所有功能。
例如,如果我创建一个新的notebook,我将在第一个命令中
%run ETL Functions使用所有功能。
例如,在ETL笔记本中,我可以使用以下函数:

def calculate_square(x):
    return x ** 2

我想创建一个包并插入例如这个函数,然后我可以这样做:

from test_package import functions

result = functions.calculate_square(5)
print(result)  # Output: 25

这样我就不需要在每次需要使用特定函数时都运行ETL函数笔记本。
我的想法,但我不知道是否可能,是保留ETL函数笔记本,并在该笔记本中获取函数并将其插入到包中,然后将此包分配给集群。也就是说,如果我需要添加另一个功能,我只需要去笔记本,插入功能并单独运行笔记本,功能将自动在包中可用。所以我也可以定义不同的集群,并在不同的集群中使用这个包。
但我也接受其他的想法,我的这个想法更多的是因为版本控制和传递到不同的环境更容易,我想。
有人有类似的经历吗?
多谢了!

rlcwz9us

rlcwz9us1#

如果只使用两个notebook,你不能创建包类型的功能,但你可以做的是将你的自定义函数写入一些.py文件沿着这两个notebook并导入它。
你可以按照下面的步骤来做。首先,在ETLnotebook中添加以下代码块。

%%sh
mkdir -p /synfs/user_pkg/
echo '''
    def calculate_square(x):
        return x ** 2
        
    def calculate_cube(x):
        return x ** 3
    ''' > /synfs/user_pkg/custscript.py

这里,我在synapse文件系统中添加这些函数。然后通过将此路径添加到系统,您可以导入这些函数。下面是添加到系统路径的代码。

import sys
if  "/synfs/user_pkg/"  not  in sys.path:
    sys.path.append("/synfs/user_pkg/")
print("Done")
print("Import functions from 'custscript'")

ETL notebook中添加以下代码块。

然后只从另一个笔记本调用它一次。

%run ETL

from custscript import calculate_square
from custscript import calculate_cube

print(calculate_square(3))
print(calculate_cube(3))

输出量:

如果你想插入任何其他函数,在ETLnotebook中添加echo命令,然后运行一次。

相关问题