当前位置: 首页 > 知识库问答 >
问题:

TypeError:PySpark中的Xgboost无法调用“JavaPackage”对象

阎嘉荣
2023-03-14

我正在尝试为我的PySpark笔记本提供Scala Xgboost API。以下是本博客:https://towardsdatascience.com/pyspark-and-xgboost-integration-tested-on-the-kaggle-titanic-dataset-4e75a568bdb但是,继续遇到以下错误:

spark._jvm.ml.dmlc.xgboost4j.scala.spark.XGBoostEstimator
<py4j.java_gateway.JavaPackage at 0x7fa650fe7a58>
from sparkxgb import XGBoostEstimator

xgboost = XGBoostEstimator(
    featuresCol="features", 
    labelCol="Survival", 
    predictionCol="prediction"
)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-1765fb9e3344> in <module>
      4     featuresCol="features",
      5     labelCol="Survival",
----> 6     predictionCol="prediction"
      7 )

~/spark-assembly-2.4.0-twttr-kryo3-scala2128-hadoop2.9.2.t05/python/pyspark/__init__.py in wrapper(self, *args, **kwargs)
    108             raise TypeError("Method %s forces keyword arguments." % func.__name__)
    109         self._input_kwargs = kwargs
--> 110         return func(self, **kwargs)
    111     return wrapper
    112 

~/local/spark-3536cd7a-6188-4ca8-b3d0-57d42cd01531/userFiles-0a0d90bc-96b4-43f2-bf21-00ae0e6f7309/sparkxgb.zip/sparkxgb/xgboost.py in __init__(self, checkpoint_path, checkpointInterval, missing, nthread, nworkers, silent, use_external_memory, baseMarginCol, featuresCol, labelCol, predictionCol, weightCol, base_score, booster, eval_metric, num_class, num_round, objective, seed, alpha, colsample_bytree, colsample_bylevel, eta, gamma, grow_policy, max_bin, max_delta_step, max_depth, min_child_weight, reg_lambda, scale_pos_weight, sketch_eps, subsample, tree_method, normalize_type, rate_drop, sample_type, skip_drop, lambda_bias)
    113 
    114         super(XGBoostEstimator, self).__init__()
--> 115         self._java_obj = self._new_java_obj("ml.dmlc.xgboost4j.scala.spark.XGBoostEstimator", self.uid)
    116         self._create_params_from_java()
    117         self._setDefault(

~/spark-assembly-2.4.0-twttr-kryo3-scala2128-hadoop2.9.2.t05/python/pyspark/ml/wrapper.py in _new_java_obj(java_class, *args)
     65             java_obj = getattr(java_obj, name)
     66         java_args = [_py2java(sc, arg) for arg in args]
---> 67         return java_obj(*java_args)
     68 
     69     @staticmethod

TypeError: 'JavaPackage' object is not callable

我已经在谷歌上搜索了这个错误,并尝试了以下内容。我从这个博客上得到了所有的想法https://github.com/JohnSnowLabs/spark-nlp/issues/232:

  1. 确保Xgboost4j位于SPARK\u DIST\u类路径中。已检查
    $echo $SPARK_DIST_CLASSPATH |  tr " " "\n" | grep 'xgboost4j' | rev | cut -d'/' -f1 | rev
    xgboost4j-0.72.jar
    xgboost4j-spark.72.jar
'export PYSPARK_SUBMIT_ARGS="--conf spark.jars=$SPARK_HOME/jars/* --conf spark.driver.extraClassPath=$SPARK_HOME/jars/* --conf spark.executor.extraClassPath=$SPARK_HOME/jars/* pyspark-shell"',

硬件信息:

  • 计算机:Linux
  • 使用Jupyter笔记本
  • Spark版本2.4.0
  • 蟒蛇3。6

共有1个答案

戴化
2023-03-14

我发现了问题,问题是sparkxbg.zip(我在网上下载的)是为xgboost4j-0.72编写的。但是,我的jars来自xgoost4j-0.9。API已完全更改。因此,0.9版本没有任何名为ml.dmlc.xgboost4j.scala.spark.XGBoost估算器的类。因此出现了错误。您可以在下面看到API的区别:

https://github.com/dmlc/xgboost/tree/release_0.72/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark

vs

https://github.com/dmlc/xgboost/tree/v0.90/jvm-packages/xgboost4j-spark/src/main/scala/ml/dmlc/xgboost4j/scala/spark

 类似资料:
  • 什么是 xgboost? XGBoost :eXtreme Gradient Boosting 项目地址:https://github.com/dmlc/xgboost 是由 Tianqi Chenhttp://homes.cs.washington.edu/~tqchen/最初开发的实现可扩展,便携,分布式 gradient boosting (GBDT, GBRT or GBM) 算法的一个库

  • XGBoost是"极端梯度提升"(eXtreme Gradient Boosting)的简称。XGBoost 源于梯度提升框架,但是更加高效,秘诀就在于算法能并行计算、近似建树、对稀疏数据的有效处理以及内存使用优化,这使得 XGBoost 至少比现有梯度提升实现有至少 10 倍的速度提升。 XGBoost 支持在多台机器上进行分布式训练,包括 AWS,GCE,Azure 和 Yarn 集群。可以与

  • 我试图对模型的对象调用方法来更新数据库中的特定资源,但当我在api url上发送POST请求时,会出现此错误 方法照明\数据库\雄辩\集合::保存不存在。 我也尝试调用方法,但同样的错误。 编辑代码: 第一行返回响应和正确响应。 和 我还试图调用或方法来删除资源,但它也会给出相同的错误 BadMethodCallException:方法Illumb\Database\Eloquent\Collec

  • 问题内容: 我有以下C ++类: 。H .CPP 我用Cython公开了以下内容: 我的问题是我不知道如何从Python调用析构函数。以下完全不执行任何操作: 我在网上找不到类似的问题。你们中有人有在这里出现过的想法吗? 我缺少有关引用计数管理的信息,或者… 非常感谢 问题答案: 删除对对象的引用(局部变量)。C ++对象中还有另一个参考。这称为参考周期。循环GC 可能会 在一段时间后收集此信息。

  • 问题内容: 我一直在尝试使用新的D3 v4将一个不错的D3图表示例转换为Angular2组件。 但是,我得到了以下代码“无法读取null的属性文本”异常: labelgroups是一个选择,append应该起作用,因此它一定是引起问题的原因。但是,它在jsfiddle中确实可以正常工作。D3 v4中的此语法是否已更改?怎么会正确呢? 谢谢! 问题答案: 在D3 v4(以及v5)中,不能使用对象设置

  • 我在一个公共类中有以下构造函数: 和变量在类中定义,该类对其进行了扩展。 当使用执行它时,我会得到以下错误消息。 将其设置为静态的,或者向类中添加一个无参数的构造函数 抛出com.hp.lft.sdk.GeneralleanFTException,java.lang.InterruptedException:将其设置为静态,或者在org.testng.internal.utils.CheckIns