错误代码

错误:TypeError: Cannot create a consistent method resolution order (MRO) for bases object, JavaModel, JavaPredictionModel, JavaMLWritable, XGBoostReadable

错误程序

import numpy as np
import pandas as pd
import os
import re
from sklearn import metrics
import matplotlib.pyplot as plt
os.environ['PYSPARK_SUBMIT_ARGS'] = '--jars xgboost4j-spark-0.72.jar,xgboost4j-0.72.jar pyspark-shell' # 本地运行时,jar包放在当前代码的路径下;提交任务时,利用--jars参数指定import findspark
findspark.init()import pyspark
from pyspark.conf import SparkConf
from pyspark.sql import SparkSession
from pyspark.ml.feature import OneHotEncoder, StringIndexer, VectorAssembler
from pyspark.ml import Pipeline
from pyspark.sql.functions import colspark = SparkSession\.builder\.appName("PySpark XGBOOST")\.master("local[*]")\.getOrCreate()from pyspark.sql.types import *
from pyspark.ml.feature import StringIndexer, VectorAssembler
spark.sparkContext.addPyFile("sparkxgb.zip")
from sparkxgb import XGBoostEstimator
import pyspark.sql.functions as F
import pyspark.sql.types as T

错误提示:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-76ed78796af5> in <module>26 from pyspark.ml.feature import StringIndexer, VectorAssembler27 spark.sparkContext.addPyFile("sparkxgb.zip")
---> 28 from sparkxgb import XGBoostEstimator29 import pyspark.sql.functions as F30 import pyspark.sql.types as Tc:\users\wuyun\appdata\local\programs\python\python36\lib\importlib\_bootstrap.py in _find_and_load(name, import_)c:\users\wuyun\appdata\local\programs\python\python36\lib\importlib\_bootstrap.py in _find_and_load_unlocked(name, import_)c:\users\wuyun\appdata\local\programs\python\python36\lib\importlib\_bootstrap.py in _load_unlocked(spec)c:\users\wuyun\appdata\local\programs\python\python36\lib\importlib\_bootstrap.py in _load_backward_compatible(spec)~\AppData\Local\Temp\spark-0a921313-e576-407d-bed0-19079db92fc9\userFiles-6a1f7c21-f62d-4c16-9402-674b1c4ad979\sparkxgb.zip\sparkxgb\__init__.py in <module>18 19 from sparkxgb.pipeline import XGBoostPipeline, XGBoostPipelineModel
---> 20 from sparkxgb.xgboost import XGBoostEstimator, XGBoostClassificationModel, XGBoostRegressionModel21 22 __all__ = ["XGBoostEstimator", "XGBoostClassificationModel", "XGBoostRegressionModel",c:\users\wuyun\appdata\local\programs\python\python36\lib\importlib\_bootstrap.py in _find_and_load(name, import_)c:\users\wuyun\appdata\local\programs\python\python36\lib\importlib\_bootstrap.py in _find_and_load_unlocked(name, import_)c:\users\wuyun\appdata\local\programs\python\python36\lib\importlib\_bootstrap.py in _load_unlocked(spec)c:\users\wuyun\appdata\local\programs\python\python36\lib\importlib\_bootstrap.py in _load_backward_compatible(spec)~\AppData\Local\Temp\spark-0a921313-e576-407d-bed0-19079db92fc9\userFiles-6a1f7c21-f62d-4c16-9402-674b1c4ad979\sparkxgb.zip\sparkxgb\xgboost.py in <module>182 183
--> 184 class XGBoostClassificationModel(JavaParamsOverrides, JavaModel, JavaPredictionModel, JavaMLWritable, XGBoostReadable):185     """186     A PySpark implementation of ml.dmlc.xgboost4j.scala.spark.XGBoostClassificationModel.c:\users\wuyun\appdata\local\programs\python\python36\lib\abc.py in __new__(mcls, name, bases, namespace, **kwargs)131 132     def __new__(mcls, name, bases, namespace, **kwargs):
--> 133         cls = super().__new__(mcls, name, bases, namespace, **kwargs)134         # Compute set of abstract method names135         abstracts = {nameTypeError: Cannot create a consistent method resolution
order (MRO) for bases object, JavaModel, JavaPredictionModel, JavaMLWritable, XGBoostReadable

问题出在第28行,出现MRO错误,无法为基对象、javamodel、JavaPredictionModel、JavaMLWritable、XGBoostReadable创建一致的方法解析顺序(MRO) 。

解决方案1

采用super更改原初始化文件中sparkxgb.zip\sparkxgb_init_.py中的继承方法,禁止多次调用,保证每个父类函数只调用一次(如果每个类都使用super)

【python】详解类class的方法解析顺序MRO(Method Resolution Order)(六)本文链接:https://blog.csdn.net/brucewong0516/article/details/79124212

在【python】详解类class的继承、init初始化、super方法(五)详见链接一文中通过super的方法使得子类调用父类的属性或函数方法。正是因为class有方法解析顺序MRO。此文将详解MRO运行逻辑。

  • Python的多继承类是通过MRO的方式来保证各个父类的函数被逐一调用,而且保证每个父类函数只调用一次(如果每个类都使用super)
  • 混用super类和非绑定的函数是一个危险行为,这可能导致应该调用的父类函数没有调用或者一个父类函数被调用多次

假设现在有一个如下的继承结构,首先通过类名显示调用的方式来调用父类的初始化函数:

#父类A,调用时先print:Enter A,再Leave A
class A(object):def __init__(self):print( "   ->Enter A")print( "   <-Leave A" )
#B类继承A类,B的初始化,先print:Enter B;
#再调用A父类的初始化,运行A父类初始化打印E: A,L: A;
#最后L: B。
class B(A):def __init__(self):print( "  -->Enter B")A.__init__(self)print ("  <--Leave B")
#C类继承A类,C的初始化,先print:Enter C;
#再调用A父类的初始化,运行A父类初始化打印E: A,L: A;
#最后L: C。
class C(A):def __init__(self):print (" --->Enter C")A.__init__(self)print (" <---Leave C")
#D类继承B、C类,先初始化进入D,print:Enter D
#先调用B类进行初始化,运行B类的初始化
#再调用C类进行初始化,运行C类的初始化
#最后打印:Leave D
class D(B, C):def __init__(self):print ("---->Enter D")B.__init__(self)C.__init__(self)print( "<----Leave D")d = D()123456789101112131415161718192021222324252627282930313233

输出结果:

#D类继承B、C类,先初始化进入D,print:Enter D
---->Enter D
#先调用B类进行初始化,运行B类的初始化-->Enter B->Enter A<-Leave A<--Leave B
#再调用C类进行初始化,运行C类的初始化--->Enter C->Enter A<-Leave A<---Leave C
#最后打印:Leave D
<----Leave D1234567891011121314

从输出中可以看到,类A的初始化函数被调用了两次,这不是我们想要的结果;我们通过super方式来调用父类的初始化函数:

class A(object):def __init__(self):print( "   ->Enter A")print( "   <-Leave A" )class B(A):def __init__(self):print( "  -->Enter B")super(B, self).__init__()print ("  <--Leave B")
class C(A):def __init__(self):print (" --->Enter C")super(C, self).__init__()print (" <---Leave C")
class D(B, C):def __init__(self):print ("---->Enter D")super(D, self).__init__()print( "<----Leave D")d = D()12345678910111213141516171819202122

输出结果:

---->Enter D-->Enter B--->Enter C->Enter A<-Leave A<---Leave C<--Leave B
<----Leave D12345678

通过输出可以看到,当使用super后,A的初始化函数只能调用了一次。这是由于Python的类有一个*_ mro* _ 属性,这个属性中就保存着方法解析顺序。结合上面的例子来看看类D的 _ *mro* _:

print("MRO:", [x.__name__ for x in D.__mro__])1

输出结果

MRO: ['D', 'B', 'C', 'A', 'object']
12

解决方案2

因为重复引用,所以直接注释掉#from sparkxgb import XGBoostEstimator句,可以跳过重复继承

TypeError: Cannot create a consistent method resolution order (MRO) for bases object, JavaModel, Jav相关推荐

  1. 日常报错 TypeError: Cannot create a consistent method resolution

    今天在学习使用Ctrl+H.Ctrl+Shift+H的用处时,随便写了几个类的继承举例来测试,结果运行一下出现报错了 TypeError: Cannot create a consistent met ...

  2. python里order_volume_Python 基础知识:Method Resolution Order (MRO) 和 super

    面向对象语言的一个重要特性就是继承.对于单继承而言,调用一个方法,只要按照继承的顺序搜索就可以:但对于多重继承而言,不同的搜索算法得到的结果不一样.这种方法(或属性)搜索的顺序就是所谓的方法解析顺序( ...

  3. python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>

    python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法> 参考文章: (1)python---方法解析顺序MRO(Method ...

  4. Oracle中,使 CREATE TABLE AS SELECT 支持ORDER BY

    Oracle中,使 CREATE TABLE AS SELECT 支持ORDER BY 文章发表:kehui  发表日期:2002-01-21  阅读次数:1103  大家都知道,"CREA ...

  5. [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution)

    [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution) 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循&quo ...

  6. Error creating bean with name ‘multipartResolver‘: Lookup method resolution failed; 上传文件异常

    浏览器错误信息: 错误信息: HTTP状态 500 - 内部服务器错误 类型 异常报告消息 Servlet[springmvctest]的Servlet.init()引发异常描述 服务器遇到一个意外的 ...

  7. vue-router.esm.js?ac56:2316 TypeError: Cannot create property ‘_Ctor‘ on string ‘H‘

    报错: vue-router.esm.js?ac56:2316 TypeError: Cannot create property '_Ctor' on string 'H' 错误的把配置项route ...

  8. TypeError: Cannot create property ‘csrq‘ on string ‘‘“

    TypeError: Cannot create property 'csrq' on string ''" 在使用子组件时如果子组件一开始要求传参,但是在另一个页面中不需要传参时一般会有这 ...

  9. android内联优化导致Inlined method resolution crossed dex file boundary

    最近App在android11上出现了一个诡异的native 崩溃,很不容易出现,但都是有个特点就是安装App后过一段时间才会出现,杀进程没用,覆盖安装同一个apk,崩溃立刻消失,日志为如下: 124 ...

最新文章

  1. css画横线箭头_用CSS绘制三角形箭头
  2. 在echarts图表外调用echarts的下载功能以及echarts getDataURL图表数据不显示的问题的解决方案...
  3. en结尾的单词_以en结尾的英语单词
  4. QT Linux打包发布
  5. 怎么修改腾讯视频的昵称
  6. vue项目查看构建后项目报告,项目个模块依赖占比比例情况
  7. java期末考试编程题 界面_救急啊!!!期末考试!怎样用JAVA的GUI(图形用户界面)来设计一个小程序!...
  8. Python基本语法(一)
  9. web api解决序列化后返回标准时间带T问题
  10. Akka Remote Actor_简单示例二
  11. 转载:PLSQL中显示Cursor、隐示Cursor、动态Ref Cursor区别
  12. 最难的几道Java面试题,看看你跪在第几个?
  13. php生成图片不显示,php绘图不显示图片怎么办
  14. InVEST实践及在生态系统服务供需、固碳、城市热岛、论文写作等实际项目中的具体应用
  15. Artstudio Pro for mac(绘图和编辑工具)
  16. drain open 线与_开漏(opendrain)和开集(opencollector)介绍
  17. 【先锋】永洪科技何春涛:不忘初心,砥砺前行
  18. html中的author属性,meta标签name=“auther”属性写法和用法详解
  19. Verilog:【7】超详细WaveDrom教程,时序图绘制利器,看这一篇就够了。
  20. 关于电压跟随器的那些事

热门文章

  1. 基于Vue全家桶制作的的高仿美团APP
  2. flutter仿美团APP
  3. 加密货币,可能是你唯一能实现“财富自由”的领域 2021-05-24
  4. XSuperNEST不只是套料软件
  5. 电子电气架构车载网关系列——常见网关芯片特点
  6. 输入/输出(I/O)管理
  7. kubernetes之基本使用2
  8. 【Debug】git push 报错提示: This repository(including wiki) size 1049.73 MB, exceeds 1024.00 MB
  9. javac 编译java_如何使用Javac工具编译Java源代码?
  10. 数据挖掘公开课推荐(含下载链接)