从模块导入 myfunctions 的 azure pyspark;没有模块名称

Posted

技术标签:

【中文标题】从模块导入 myfunctions 的 azure pyspark;没有模块名称【英文标题】:azure pyspark from modules import myfunctions; No module name 【发布时间】:2021-01-08 15:56:30 【问题描述】:

我尝试了多种方法从我们的共享团队目录中导入包含一堆共享函数的本地脚本,示例如下。我还尝试使用同一目录中的导入脚本“from .import sharedFunctions”和父目录中的“from sharedModules import sharedFunctions”。根据一些谷歌搜索,所有这些都没有返回名为“sharedFunctions”的模块。在 Azure 中进行此设置的最佳方式是什么?

谢谢

import sys, os
dir_path = '/Shared/XXX/sharedModules'
sys.path.insert(0, dir_path)
print(sys.path)
# dir_path = os.path.dirname(os.path.realpath(__file__))
# sys.path.insert(0, dir_path)
import sharedFunctions

sourceTable='dnb_raw'
sourceQuery='select DUNSNumber , GlobalUltimate_Name, BusinessName from'
sourceId = 'DUNSNumber'
sourceNameList=['Tradestyle','BusinessName']
NewTable = 'default.' + sourceTable + '_enhanced'  
#dbutils.fs.rm("dbfs:/" + NewTable + "/",recurse=True)
clean_names(sourceTable,sourceQuery,sourceId,sourceNameList)

【问题讨论】:

我正确理解代码在笔记本中? 是的,我正在尝试导入另一个笔记本。 很痛苦,但 databricks 笔记本不像标准 .py 脚本那样运行,您需要使用 %run \path\to_your\dbc_file 将其导入文件中@ 我自己的解决方法是创建一个包,然后导入这些,但是如果你的团队没有更新到 devops / github 【参考方案1】:

当您在 Databricks 中使用笔记本时,它们不在 Python 将其理解为模块的某些文件系统上。

如果您想在当前上下文中包含另一个带有其他定义的笔记本,您可以使用%run magic command,将另一个笔记本的名称作为参数传递:

%run /Shared/XXX/sharedModules/sharedFunctions

%run 不是进口的完全替代品,如文档中所述

您不能使用 %run 运行 Python 文件并将该文件中定义的实体导入笔记本。要从 Python 文件导入,您必须将该文件打包到 Python 库中,从该 Python 库创建一个 Databricks 库,然后将该库安装到您用于运行笔记本的集群中。

如果你想执行另一个notebook来获取一些结果,你可以使用所谓的notebook workflow - 当通过dbutils.notebook.run执行时,notebook被调度执行,你可以传递一些参数给它,等等.,但结果将主要通过文件系统、托管表等共享。

【讨论】:

谢谢,我还找到了一个在 pypi 中为这个名称 libify 创建的库。

以上是关于从模块导入 myfunctions 的 azure pyspark;没有模块名称的主要内容,如果未能解决你的问题,请参考以下文章

Python3-笔记-C-007-函数-导入模块并调用

错误:尚未正确初始化 Azure PowerShell 上下文。请导入模块并重试

我是否必须在powershell Runbook(azure)中导入模块?

Azure DevOps:将 Maven 工件从 Azure 工件导入发布时出错

如何在没有 npm 的情况下手动从 github 下载和导入 node 模块,并将其安装在 React Native 项目中?

将 Azure Function 从门户导入 Visual Studio