描述:
在 Python 3.10.0 中使用 PySpark 时,我遇到了 LightGBM 回归器和分类器的问题。
环境:
PySpark版本:3.2.1 Python版本:3.10.0 Py4j版本:0.10.9.5 Spark jar 包:com.microsoft.azure:synapseml_2.12:0.11.0
错误信息:
java.lang.UnsatisfiedLinkError:无法加载库:/var/folders/dz/mc23060n2kq52djyhcxl9kmh0000gp/T/mml-natives17452036633252549823/lib_lightgbm.dylib
重现步骤:
所做的尝试: 我按照here提供的解决方案进行操作,并符号链接了已安装的 libomp,但问题仍然存在。
详细错误堆栈:
py4j.protocol.Py4JJavaError:调用 o5147.fit 时发生错误。 E:java.lang.UnsatisfiedLinkError:无法加载库:/var/folders/dz/mc23060n2kq52djyhcxl9kmh0000gp/T/mml-natives17452036633252549823/lib_lightgbm.dylib E 位于 java.base/java.lang.ClassLoader.loadLibrary(来源未知) E 位于 java.base/java.lang.Runtime.load0(来源未知) E 位于 java.base/java.lang.System.load(来源未知) E 位于 com.microsoft.azure.synapse.ml.core.env.NativeLoader.loadLibraryByName(NativeLoader.java:66) E 位于 com.microsoft.azure.synapse.ml.lightgbm.LightGBMUtils$.initializeNativeLibrary(LightGBMUtils.scala:33) E 位于 com.microsoft.azure.synapse.ml.lightgbm.LightGBMBase.train(LightGBMBase.scala:37) E 位于 com.microsoft.azure.synapse.ml.lightgbm.LightGBMBase.train$(LightGBMBase.scala:36) E 位于 com.microsoft.azure.synapse.ml.lightgbm.LightGBMRegressor.train(LightGBMRegressor.scala:39) E 位于 com.microsoft.azure.synapse.ml.lightgbm.LightGBMRegressor.train(LightGBMRegressor.scala:39) E at org.apache.spark.ml.Predictor.fit(Predictor.scala:151) E at org.apache.spark.ml.Predictor.fit(Predictor.scala:115) E at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法) E 位于 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(来源未知) E 位于 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(来源未知) E 位于 java.base/java.lang.reflect.Method.invoke(来源未知) E 位于 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) E 位于 py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) E 位于 py4j.Gateway.invoke(Gateway.java:282) E 位于 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) E 位于 py4j.commands.CallCommand.execute(CallCommand.java:79) E 在 py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182) E 位于 py4j.ClientServerConnection.run(ClientServerConnection.java:106) E 位于 java.base/java.lang.Thread.run(来源未知)
补充说明:
在突触中 Spark 3.2 即将退役。
所以,我建议您使用spark 3.3或3.4。
在这 2 个版本中的任何版本中,您都将内置
synapseml
包甚至 LightGBM,如下所示。
在这里,你可以看到spark 3.4中的
synapseml
版本是1.0.2
。
如果您想配置不同版本,请执行以下命令,如本文档所述。
%%configure -f
{
"name": "synapseml",
"conf": {
"spark.jars.packages": "com.microsoft.azure:synapseml_2.12:<version>",
"spark.jars.repositories": "https://mmlspark.azureedge.net/maven",
"spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",
"spark.yarn.user.classpath.first": "true",
"spark.sql.parquet.enableVectorizedReader": "false"
}
}