0

我正在尝试将模块导入 nifi 中的 executescript 处理器。正如建议的那样,我正在提供模块目录的完整路径。

示例:模块目录:/var/lib/nifi/Levenshtein --> 其中包含脚本所需的文件。

此外,在脚本中,我还设置了指向使用该模块目录的系统路径我的代码看起来像这样

import re
import datetime
import sys
sys.path.append('/var/lib/nifi/Levenshtein')

import Levenshtein

当我使用上述代码运行处理器时,它失败了。

错误:第 3 行没有名为 Levenshtein 的模块。

4

2 回答 2

1

如果此特定库是“本机模块”(编译的 C 代码),Jython(由 使用的 Python 执行引擎ExecuteScript)将无法加载它。ExecuteScript在 NiFi 中使用 Python 只能使用纯 Python 代码。

解决方法是在命令行上使用ExecuteProcessorExecuteStreamCommand和调用python <my_script.py>,它可以处理各种 Python 版本、本机模块等。此执行将发生在 JVM 之外并使用真正的 Python,而不是 Jython。

于 2020-06-01T23:26:19.567 回答
0

总结一下 Andy 所说的,这个Levensthein 模块是用 C 编写的,并且不能由 Java 虚拟机执行,假设您正在运行 Jython 实现。

于 2020-06-02T15:28:25.710 回答