Мне нужно реализовать ExecuteScript в Nifi, чтобы выполнять транспонирование столбцов, и я использую для этого pyspark.
Но проблема говорит «не удалось обработать из-за javax.script.ScriptExeption: ImportError: нет модуля с именем pyspark в строке номер 1:»
Я установил путь к spark и pyspark, как этот, для настройки каталога модуля в свойстве ExecuteScript.
C:\Users\username\Desktop\spark\spark-2.4.3-bin-hadoop2.7\hadoop,
C:\Users\username\Desktop\spark\spark-2.4.3-bin-hadoop2.7\bin\pyspark
Но это не сработало.
Боюсь, это очень принципиальный вопрос, полдня не мог разобраться..
Для настройки свойств обработчика ExecuteScript я установил python для Script Engine, задал путь, по которому находится мой код python с модулем pyspark для файла Script, и каталог модуля, как я уже упоминал выше. Следовали этим примерам в связь
Вероятно, это связано с тем, что модуль pyspark
является модулем Python скомпилированный в собственном коде, а Apache NiFi использует Джейтон в процессоре ExecuteScript
. Это известная проблема, и полное объяснение здесь, а также некоторые обходные пути и подробности о вариантах.
Самый простой ответ — использовать ExecuteStreamCommand
и передать необходимые атрибуты потокового файла в качестве аргументов, а содержимое — в виде STDIN
. Вывод скрипта Python будет возвращен через STDOUT
и захвачен как новое содержимое потокового файла.
Спасибо. Я написал скрипт Python с модулем pandas, и он работал с ExecuteStreamCommand!
Можете ли вы таким образом запустить «обычный» код Python? Вы можете запустить скрипт с помощью pyspark вручную на всех соответствующих узлах?