pyspark 整合xgboost若干问题

本人捣鼓两天,希望能给其他人一点提示

https://zhuanlan.zhihu.com/p/101997567

上边的楼主总结的不错,但是有两个问题:

第一个是环境即:--archives,用虚拟环境比自己打包方便,可以参考https://www.cnblogs.com/nucdy/p/8569606.html

第二个是小版本的问题:主要是json4s,https://github.com/dmlc/xgboost/tree/master/jvm-packages从这里下的xgboost的zip文件和jar文件,是0.90版本,如果用Scala2.11的话,应该对应这json4s-core_2.11-3.5.3这个jackson版本,也就是spark-2.4以后比较新的spark版本。如果是spark2.2-spark2.3的话,建议使用

--jars ./xgboost4j-spark-0.80.jar,.xgboost4j-0.80.jar ;

如果是更低的spark版本只能使用0.72版本了,本人在spark2.3使用0.80没问题,使用0.90就会报错:

File "xgtest.py", line 105, in <module>
  model.write().overwrite().save("/titanic/xgboost_class_test")
  File "/opt/cloudera/parcels/SPARK2-2.3.0.cloudera3-1.cdh5.13.3.p0.458809/lib/spark2/python/lib/pyspark.zip/pyspark/ml/util.py", line 165, in save
  File "/opt/cloudera/parcels/SPARK2-2.3.0.cloudera3-1.cdh5.13.3.p0.458809/lib/spark2/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
  File "/opt/cloudera/parcels/SPARK2-2.3.0.cloudera3-1.cdh5.13.3.p0.458809/lib/spark2/python/lib/pyspark.zip/pyspark/sql/utils.py", line 63, in deco
  File "/opt/cloudera/parcels/SPARK2-2.3.0.cloudera3-1.cdh5.13.3.p0.458809/lib/spark2/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o676.save.
: java.lang.NoSuchMethodError: org.json4s.jackson.JsonMethods$.parse$default$3()Z

jackson版本不一致,和py4j没啥关系,问题在于xgboost4j-spark的编译jar包。

以下是spark2.4.5的json4s版本:

以下是spark2.3.1的json4s版本,0.80里边的编译包应该就是用的这个:

总结:jackson是大数据组件版本更新的标杆,容易出现小版本的问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用pyspark调用xgboost的步骤: 1.下载xgboost4j-spark-0.72.jar和xgboost4j-0.72.jar两个jar文件,并将它们放在一个文件夹中。 2.下载sparkxgb.zip文件,并解压缩到一个文件夹中。 3.在你的pyspark代码中,导入xgboost4j-spark-0.72.jar和xgboost4j-0.72.jar两个jar文件: ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("xgboost").getOrCreate() spark.sparkContext.addPyFile("path/to/sparkxgb.zip") spark.sparkContext.addPyFile("path/to/xgboost4j-spark-0.72.jar") spark.sparkContext.addPyFile("path/to/xgboost4j-0.72.jar") ``` 4.在你的pyspark代码中,导入xgboost: ```python from sparkxgb import XGBoostEstimator ``` 5.将你的数据转换为Spark DataFrame,并将其拆分为训练集和测试集: ```python data = spark.read.format("libsvm").load("path/to/data") (trainingData, testData) = data.randomSplit([0.7, 0.3]) ``` 6.设置xgboost的参数: ```python params = {"eta": 0.1, "max_depth": 6, "objective": "binary:logistic", "num_class": 2} ``` 7.创建XGBoostEstimator对象,并将参数传递给它: ```python xgboost = XGBoostEstimator(**params) ``` 8.使用fit()方法拟合模型: ```python model = xgboost.fit(trainingData) ``` 9.使用transform()方法对测试集进行预测: ```python predictions = model.transform(testData) ``` 10.评估模型的性能: ```python from pyspark.ml.evaluation import BinaryClassificationEvaluator evaluator = BinaryClassificationEvaluator() print("Test Area Under ROC: " + str(evaluator.evaluate(predictions))) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值