PyPMML misslyckas med Could not find py4j jar
fel
Problem
PyPMML är ett PMML-bedömnings bibliotek.
När du har installerat PyPMML i ett Azure Databricks-kluster Miss lyckas det med ett Py4JError: Could not find py4j jar
fel.
from pypmml import Model
modelb = Model.fromFile('/dbfs/shyam/DecisionTreeIris.pmml')
Error : Py4JError: Could not find py4j jar at
Orsak
Det här felet uppstår på grund av ett beroende av standard biblioteket för Py4J.
- Databricks Runtime 5.0 – 6.6 använder Py4J 0.10.7.
- Databricks Runtime 7,0 och senare använder Py4J 0.10.9.
Standard biblioteket för Py4J installeras på en annan plats än ett standard-Py4J-paket. Det innebär att när PyPMML försöker anropa Py4J från standard Sök vägen, Miss lyckas det.
Lösning
Konfigurera ett initierings skript med kluster omfång som kopierar den nödvändiga Py4J jar-filen till den förväntade platsen.
Använd pip för att installera den version av Py4J som motsvarar din Databricks Runtime version.
Till exempel, i Databricks Runtime 6,5 körs
pip install py4j==<0.10.7>
i en bärbar dator i installera Py4J 0.10.7 på klustret.Kör
find /databricks/ -name "py4j*jar"
i en bärbar dator för att bekräfta den fullständiga sökvägen till jar-filen för Py4J. Den finns vanligt vis i en sökväg som liknar/databricks/python3/share/py4j/
.Kopiera Py4J jar-filen manuellt från installations Sök vägen till DBFS-sökvägen
/dbfs/py4j/
.Kör följande kodfragment i en python-anteckningsbok för att skapa
install-py4j-jar.sh
init-skriptet. Kontrol lera att versions numret för Py4J som visas i kodfragmentet motsvarar din Databricks Runtime version.dbutils.fs.put("/databricks/init-scripts/install-py4j-jar.sh", """ #!/bin/bash echo "Copying at `date`" mkdir -p /share/py4j/ /current-release/ cp /dbfs/py4j/py4j<version number>.jar /share/py4j/ cp /dbfs/py4j/py4j<version number>.jar /current-release/ echo "Copying completed at `date`" """, True)
Koppla
install-py4j-jar.sh
initierings skriptet till klustret genom att följa anvisningarna i Konfigurera ett initierings skript med kluster omfång.Starta om klustret.
Kontrol lera att PyPMML fungerar som förväntat.