在Pyspark中使用xgboost会导致ImportError:无法导入名称“ JavaPredictionModel”

问题描述

这是我第一次尝试在pyspark中使用xgboost,因此我在Java和Pyspark方面的经验仍处于学习阶段。

我看到了一篇标题为PySpark ML and XGBoost full integration tested on the Kaggle Titanic dataset的关于数据科学的出色文章,作者在pyspark中介绍了xgboost的用例。

我尝试按照这些步骤操作,但被ImportError击中。

安装

我已经从maven下载了两个jar文件,并将它们放在笔记本所在的目录中。

我还将xgboost wrapper file sparkxgb.zip下载到了路径~/Softwares/sparkxgb.zip

我的jupyter笔记本第一个单元格

import xgboost
print(xgboost.__version__) # 1.2.0


import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--jars xgboost4j-spark-0.72.jar,xgboost4j-0.72.jar pyspark-shell'

HOME = os.path.expanduser('~')

import findspark
findspark.init(HOME + "/Softwares/spark-3.0.0-bin-hadoop2.7")

import pyspark
from pyspark.sql.session import SparkSession
from pyspark.sql.types import *
from pyspark.ml.feature import StringIndexer,VectorAssembler
from pyspark.ml import Pipeline
from pyspark.sql.functions import col

spark = SparkSession\
        .builder\
        .appName("PySpark XGBOOST Titanic")\
        .getOrCreate()

spark.sparkContext.addPyFile(HOME + "/Softwares/sparkxgb.zip")
print(pyspark.__version__) # 3.0.0
# this does not give any error
# Computer: MacOS

此单元格显示错误

from sparkxgb import XGBoostEstimator

错误

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-7-cf2ff39c26f4> in <module>
----> 1 from sparkxgb import XGBoostEstimator

/private/var/folders/tb/7xdk9scs79j9hxzcl3l_s6k00000gn/T/spark-1cf282a4-f3f2-42b3-a064-6bbd8751489e/userFiles-abca5e59-5af3-4b3d-a3bc-edc2973e9995/sparkxgb.zip/sparkxgb/__init__.py in <module>
     18 
     19 from sparkxgb.pipeline import XGBoostPipeline,XGBoostPipelineModel
---> 20 from sparkxgb.xgboost import XGBoostEstimator,XGBoostClassificationModel,XGBoostRegressionModel
     21 
     22 __all__ = ["XGBoostEstimator","XGBoostClassificationModel","XGBoostRegressionModel",/private/var/folders/tb/7xdk9scs79j9hxzcl3l_s6k00000gn/T/spark-1cf282a4-f3f2-42b3-a064-6bbd8751489e/userFiles-abca5e59-5af3-4b3d-a3bc-edc2973e9995/sparkxgb.zip/sparkxgb/xgboost.py in <module>
     19 from pyspark.ml.param import Param
     20 from pyspark.ml.param.shared import HasFeaturesCol,HasLabelCol,HasPredictionCol,HasWeightCol,HasCheckpointInterval
---> 21 from pyspark.ml.util import JavaMLWritable,JavaPredictionModel
     22 from pyspark.ml.wrapper import JavaEstimator,JavaModel
     23 from sparkxgb.util import XGBoostReadable

ImportError: cannot import name 'JavaPredictionModel' from 'pyspark.ml.util' (/Users/poudel/Softwares/spark-3.0.0-bin-hadoop2.7/python/pyspark/ml/util.py)

问题

  • 如何解决该错误并在pyspark中运行xgboost?

也许我没有将下载的jar文件放置到正确的路径。 (我将它们放置在有jupyter笔记本文件的工作目录中)。我需要将这些文件放在其他地方吗?我假设jupyter自动加载路径.并看到了这些jar文件,但我可能是错的。

如果有任何优秀的撒玛利亚人已经在pyspark中运行过xgboost,他们的帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)