Ошибка импорта в Mule ESB при использовании Numpy и Pandas - PullRequest
0 голосов
/ 30 октября 2019

Я разработал скрипт Scrapping для получения информации из Интернета в Mule ESB, но у меня проблемы с импортом Pandas, Numpy и BeautifulSoup. Как правильно включить эти библиотеки?

Прежде всего, чтобы использовать внешние библиотеки Python, необходимо включить их в переменную пути Mule ESB при ее выполнении:

-Dpython.path=./lib/libPy/pymongo-3.9.0;./lib/libPy/numpy-1.17.3;./lib/libPy/pandas-0.25.2

Мой сценарий Pythonнаходится в конце этого POST и работает в Jupyter Notebook, хотя для извлечения ошибки я использовал следующее:

import numpy as np
import pandas as pd

print("Everything done correctly!")

Ошибка, которую дает мне Mule ESB, следующая:

ERROR 2019-10-30 10:31:50,171 [[pruebascrapping].pruebascrappingFlow.stage1.02] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : ImportError: Error importing numpy: you should not try to import numpy from
        its source directory; please exit the numpy source tree, and relaunch
        your python interpreter from there. in <script> at line number 1 (javax.script.ScriptException)
Payload               : foo
Transformer           : ScriptTransformer{this=9880a15, name='ScriptTransformer', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.Object, mimeType='*/*', encoding='null'}, sourceTypes=[]}
Payload Type          : java.lang.String
Element               : /pruebascrappingFlow/processors/0 @ pruebascrapping:pruebascrapping.xml:22 (Python)
Element XML           : <scripting:transformer doc:name="Python">
                        <scripting:script engine="jython">import numpy as np
import pandas as pd

print("Everything done correctly!")</scripting:script>
                        </scripting:transformer>
--------------------------------------------------------------------------------
Root Exception stack trace:
Traceback (most recent call last):
  File "<script>", line 1, in <module>
  File "C:\Users\enriquebs\AnypointStudio\workspace\pruebascrapping\lib\libPy\numpy-1.17.3\numpy\__init__.py", line 131, in <module>
    raise ImportError(msg)
ImportError: Error importing numpy: you should not try to import numpy from
        its source directory; please exit the numpy source tree, and relaunch
        your python interpreter from there.

Я не знаю точно, что делать, есть библиотеки, которые работают, но другие не работают, и я хотел бы интегрировать машинное обучение с помощью Scikit-Learn. Однако, если я не могу использовать Numpy и Pandas, это становится трудным, и я не могу найти никаких ссылок на использование этих инструментов в Mule ESB.

import pandas as pd
import requests
import time
from bs4 import BeautifulSoup
from pymongo import MongoClient

url = "http://pagina.jccm.es/medioambiente/rvca/Dest/Cuenca.htm"
response = requests.get(url)

soup = BeautifulSoup(response.text, 'html')
tablaDatos = soup.find ("table")

client = MongoClient('pluton.i3a.uclm.es',username='root',password='patata',authSource='admin',authMechanism='SCRAM-SHA-1')
db = client.kikeDevVieja

dataB = pd.read_html(str(tablaDatos))

camposEvento = ["so2","date","no2C","timestampSensor","o3","pm10","pressure","co","batteryVolts","no2",
                                      "idStation","serial","pm1","coC","pm2_5","temperature","humidity","luminosity","o3C",
                                      "batteryCurrent", "timestamp", "batteryLevel"]
eventoSimple = {"idStation" : "Universidad",
        "serial" : "NOSERIALID",
        "humidity" : 0.0,
         "luminosity" : 0.0,
         "pm10" : 0.0,
         "batteryLevel" : 100,
         "co" : 0.0,
         "coC" : 0.0,
         "pressure" : 0.0,
         "no2C" : 0.0,
         "batteryVolts" : 0.0,
         "timestamp" : int(time.time())*1000,
         "batteryCurrent" : 0,
         "pm1" : 0.0,
         "o3C" : 0.0,
         "temperature" : 0.0}

scrappeado = {dataB[3][0][ind][dataB[3][0][ind].find("(")+1:dataB[3][0][ind].find(")")].lower().replace(",", "_") : float(dataB[3][1][ind].replace(",",".")[:-6])
              for ind, x in enumerate(dataB[3][0])
               if dataB[3][0][ind][dataB[3][0][ind].find("(")+1:dataB[3][0][ind].find(")")].lower().replace(",", "_") in camposEvento}
eventoSimple.update(scrappeado)
eventoSimple
...