maven依赖 spark sql_window环境运行spark-xgboost 8.1踩到的坑

在window 环境下使用spark - xgboost会出现一些问题,这里记录一下。

环境:window 7 + spark 2.31 + xgboost 8.1 + idea + maven

一.依赖以及代码

数据集下载地址

UCI Machine Learning Repository: Iris Data Set​archive.ics.uci.edu

pom依赖

<!-- https://mvnrepository.com/artifact/ml.dmlc/xgboost4j -->
<dependency><groupId>ml.dmlc</groupId><artifactId>xgboost4j</artifactId><version>0.81</version>
</dependency><!-- https://mvnrepository.com/artifact/ml.dmlc/xgboost4j-spark -->
<dependency><groupId>ml.dmlc</groupId><artifactId>xgboost4j-spark</artifactId><version>0.81</version>
</dependency>

测试代码

import org.apache.spark.ml.feature.{StringIndexer}
import org.apache.spark.sql.types.{DoubleType, StringType, StructField, StructType}
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.sql. SparkSession
import ml.dmlc.xgboost4j.scala.spark.{XGBoostClassificationModel, XGBoostClassifier}
/*** author  :wy* todo    : xgboost鸢尾花分类* Created by pc-admin on 2020-03-12 11:21**/
object xgboostIrisDataTest {def main(args: Array[String]): Unit = {val ss = SparkSession.builder().master("local[4]").appName("xgboostRisiDataTest").getOrCreate()val dataPath = "iris.data"val schema = new StructType(Array(StructField("sepal lenght", DoubleType, true),StructField("sepal width", DoubleType, true),StructField("petal lenght", DoubleType, true),StructField("petal width", DoubleType, true),StructField("class", StringType, true)))val rawInput = ss.read.schema(schema).csv(dataPath)// 把字符串class转换成数字数字classval stringIndexer = new StringIndexer().setInputCol("class").setOutputCol("classIndex").fit(rawInput)// 执行进行转换,并把原有的字符串class删除掉val labelTransformed = stringIndexer.transform(rawInput).drop("class")// 将多个字段合并成在一起,组成futureval vectorAssembler = new VectorAssembler().setInputCols(Array("sepal lenght", "sepal width", "petal lenght", "petal width")).setOutputCol("features")//将数据集切分成训集和测试集val xgbInput = vectorAssembler.transform(labelTransformed).select("features", "classIndex")val splitXgbInput = xgbInput.randomSplit(Array(0.9, 0.1))val trainXgbInput = splitXgbInput(0)val testXgbInput = splitXgbInput(1)// 注意!!!这个num_workers 必须小于等于 local[4] 线程数,否则会出现程序卡死现象.val xgbParam = Map("eta" -> 0.1f,"max_depth" -> 2,"objective" -> "multi:softprob","num_class" -> 3,"num_round" -> 100,"num_workers" -> 4)// 创建xgboost函数,指定特征向量和标签val xgbClassifier = new XGBoostClassifier(xgbParam).setFeaturesCol("features").setLabelCol("classIndex")// 开始训练val xgbClassificationModel: XGBoostClassificationModel = xgbClassifier.fit(trainXgbInput)// 预测val result = xgbClassificationModel.transform(testXgbInput)// 展示 result.show(1000)ss.stop()}
}

二.出现的Bug 以及解决方法

1.java.io.FileNotFoundException: File /lib/xgboost4j.dll was not found inside JAR.

f2747e97a56e84c9e1314e5796332240.png

进入 $MAVEN_HOMEconfrepositorymldmlc 找到 xgboost4j

892da14c5f552ebed5d13978d295fff4.png

找到你使用的版本,这里使用的是8.1,点击。

b6a8159a5eec7c7a2a6d17f982a8110f.png

用winRAR打开.

12563dd8c054c1cdf2de1b5dbc1406a5.png

发现确实缺少 File /lib/xgboost4j.dll文件。

进入点击以下链接。选择你使用的版本

criteo-forks/xgboost-jars​github.com
ccf38cb7fd718844d1adf4416b0f7a89.png

点击红框下载jar包。

9e757635a09d41398b50a683e85d093c.png

下载完成后,解压,你会在lib文件夹下找到这个文件。

ce615b5b2f67dce06ab964b018fd943a.png

用WinRAR打开xgboost4j-8.1.jar之后,把下载的 xgboost4j-0.81-criteo-20180821_2.11-win64.jarlib 中的xgboost4j.dll 直接拉进MAVEN_HOMEonfrepositorymldmlcxgboost4j0.81xgboost4j-8.1.jarbin里

在尝试运行一下,问题解决。

73ac7176810cce5d36a17ed87fa725da.png

如果提示文件正在被使用,无法修改,请关闭idea即可。

2. XGBoostModel training failed

Exception in thread "main" ml.dmlc.xgboost4j.java.XGBoostError: XGBoostModel training failed
atml.dmlc.xgboost4j.scala.spark.XGBoost$.postTrackerReturnProcessing(XGBoost.scala:363)
at ml.dmlc.xgboost4j.scala.spark.XGBoost$.trainDistributed(XGBoost.scala:334)
at ml.dmlc.xgboost4j.scala.spark.XGBoostEstimator.train(XGBoostEstimator.scala:139)
at ml.dmlc.xgboost4j.scala.spark.XGBoostEstimator.train(XGBoostEstimator.scala:36)
at org.apache.spark.ml.Predictor.fit(Predictor.scala:90)
at ml.dmlc.xgboost4j.scala.spark.XGBoost$.trainWithDataFrame(XGBoost.scala:191)

如果你也出现了这个bug,那么恭喜你,咱们的节奏对上了,这个问题我搞了一下午总结一下网上的几种说法。

  • 运行环境存在多个scala 和 java 版本
  • spark版本和xgboost版本不对应,比如xgboost 9.0 必须对应spark 2.4以上版本,xgboost 8.1 必须对应spark 2.31以上版本。

我一一验证,最后的结论都是不行的,于是一气之下我重启了一下计算机,您猜怎么着???奇迹的问题解决了。。。

结论:先重启一下计算机,如果问题解决,你将节省一下午时间。。。

3 . 程序运行卡着不动的情况

b042f956277b454b7500caba8d0a5596.png

e1217c25c44b039bf618f81baa001a1a.png

出现这种情况就是你在初始化spark master的时候给的线程数小于你的work_number,切记:

master('local[m]')

work_number(n)

一定要 m >= n

三,运行结果

15dcfbd9d491c156b463f53d4267884e.png

原标签: classIndex

预测标签 : prediction

真特喵的不容易~~~

参考资料:

sgboost AIP官方文档

XGBoost4J-Spark Tutorial (version 0.8+)​xgboost.readthedocs.io

一个情况和我类似的国际友人

https://github.com/dmlc/xgboost/issues/2780​github.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python书籍排行榜前十名_学习Python,这些书你看过几本?

Python是一门简单&#xff0c;强大的计算机编程语言。Python书也是种类繁多&#xff0c;对于初学者选择合适的学习书籍是很有必要的。 1、Python编程&#xff1a;从入门到实践 全书分两部分&#xff1a;第一部分介绍用Python编程所必须了解的基本概念&#xff1b;第二部分将理论…

MyBatis笔记——配置文件完成增删改查

l 完成品牌数据的增删改查操作 要完成的功能列表清单&#xff1a;□ 查询 查询所有数据 查看详情 条件查询□ 添加□ 修改 修改全部字段 修改动态字段□ 删除 删除一个 批量删除准备环境&#xff1a; 数据库表tb_branddrop table if exists tb_brand;CREATE TABLE tb_brand(--…

web——Tomcat Maven插件及Servlet入门

• IDEA中使用Tomcat-Tomcat Maven插件 ○ Pom.xml添加Tomcat插件<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><!--&…

外架小横杆外露长度规范要求_安全文明施工规范

分类规范内容内外架安全1、扫地杆离地0.2米&#xff0c;立杆间距1.5米&#xff0c;外大横杆上下间距1米&#xff0c;内大横杆上下间距1.8米&#xff0c;步距1.8米2、立杆着落点不得悬空&#xff0c;垫块面积&#xff1e;240240mm3、外架和支模架不得连接、固定在一起4、外架操作…

java 邮件模板_Spring Boot 2发送邮件手把手图文教程

点击上方 IT牧场 &#xff0c;选择 置顶或者星标技术干货每日送达&#xff01;本文基于&#xff1a;Spring Boot 2.1.3&#xff0c;理论支持Spring Boot 2.x所有版本。最近有童鞋问到笔者如何用Spring Boot发送邮件&#xff0c;故而整理下Spring Boot发送邮件的各种姿势。说到邮…

Web——Request请求

•Request通用方式获取请求参数 ○ 请求参数获取方式&#xff1a; GET方式&#xff1a;□ String getQueryString() POST方式&#xff1a;□ BufferedReader getReader()○ 通用方式&#xff1a; Map<String, String[]> getParameterMap()//获取所有参数Map集合 String[]…

mfc点击按钮让对话框关闭_WinXP系统开始菜单中关机按钮消失的恢复教程

WinXP系统开始菜单里面的关机按钮不见了怎么办&#xff1f;最近有用户反映&#xff0c;打开WinXP系统的开始菜单准备关机时&#xff0c;却发现无法关机了&#xff0c;开始菜单里面没有关机按钮&#xff0c;这是怎么回事&#xff1f;本文就为大家介绍XP系统恢复开始菜单关机按钮…

马逊s3云存储接口_当对象存储“湖”有了强一致性

从 2006年第一个云服务对象存储服务 Amazon S3 发布直到 2020年12月1日之前&#xff0c;S3 对象操作都是遵循 “最终一致性”原则&#xff0c;对象存储服务本身就是一个复杂的分布式系统&#xff0c;但对用户暴露简单的 API 服务接口&#xff0c;无限扩展存储大小&#xff0c;极…

Web——Request转发和Response重定向

• Request请求转发 ○ 请求转发 请求转发&#xff08;forward&#xff09;&#xff1a;一种在服务器内部的资源跳转方式 ○ 实现方式&#xff1a; request.getRequestDispatcher("资源B路径").forward(request,response);○ 请求转发资源间共享数据&#xff1a;使用…

if else if语句格式_闲话Python之条件语句IF

我发现好像哪里都会有if&#xff0c;下面就来聊聊Python当中if的常见用法。最简单的格式就是&#xff0c;只有一个if&#xff0c;比如下面这个&#xff1a;my_deposit代码中的my_deposit50000等效于my_depositmy_deposit50000his_deposit-50000则等效于his_deposithis_deposit-…

delphi下实现ribbon界面的方法(一)

delphi下实现ribbon界面的方法&#xff08;一&#xff09; office 2007和2010是现在大多数人经常使用的办公软件&#xff0c;几乎每天都在使用。因此&#xff0c;在软件中如果使用类office的界面样式&#xff0c;客户用着非常习惯&#xff0c;而且学习曲线低&#xff0c;office…

Web笔记——Filter过滤器

○ 概念&#xff1a;Filter表示过滤器&#xff0c;是JavaWeb三大组件(Servlet、Filter、Listener)之一。 ○ 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 ○ 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权限控制、统一编码处理、敏感…

mysql修改语句_序言:MySQL与Navicat安装Tips

一、数据库相关的基础知识1.1 数据分析师主要集中在select高效查找上&#xff0c;纯粹的底层运维就不需要太关注&#xff1b;1.2 数据库与表类比sheet是表&#xff0c;整个Excel文件是一个数据库&#xff1b;1.3 行与列1.4 主键&#xff08;人的身份证&#xff09;表的主键不做…

java office文件加水印_永中Office与统一操作系统UOS完成适配,开辟高效智能办公新领域...

近日&#xff0c;永中Office办公软件完成了与统一操作系统UOS的适配工作&#xff0c;此次成功适配表明信息技术应用创新操作系统与办公软件兼容性能优良、运行稳定&#xff0c;大幅提升用户在信创计算机上的办公体验&#xff0c;可为政企提供安全可靠的IT环境。永中Office是由永…

c3p0依赖导入失败问题

今天在学习c3p0的时侯&#xff0c;导入依赖后变红然后去maven仓库[&#xff08;https://mvnrepository.com/artifact/com.mchange/c3p0&#xff09;]中找&#xff0c;发现是groupId的问题。 更改后正常

c++ char*初始化_C开发实战-深入理解指针

Visual Studio 2019 解决方案的多项目应用在讲述变量&#xff0c;数据类型&#xff0c;运算符和表达式以及程序流程控制&#xff0c;数组&#xff0c;函数的相关内容&#xff0c;所有的代码都放在解决方案c-core的c-core-foundational项目下。如果你有其他编程语言经验&#xf…

java游戏服务器面试_我做游戏开发这八年

点击上方“CSDN学院精品课”&#xff0c;选择“置顶公众号”CSDN学院精品课 IT人的职业提升平台作者 | kakashi8841简述这篇文章并不是想教会大家如何开发游戏&#xff0c;更不能教大家如何成为技术总监。而是分享我一路做开发的一些经历或心得体验。与编程擦肩而过2004年&…

SSM(Spring、SpringMVC、MyBatis)框架笔记——Spring入门

一、Spring简介 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架&#xff0c; 以IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programming&#xff1a;面向切面编程&#xff09;为内核。提供了展现层SpringM…

c++ 字符串拼接_字符串拼接新姿势:StringJoiner

来自&#xff1a;Hollis(微信号&#xff1a;hollischuang)在为什么阿里巴巴不建议在for循环中使用””进行字符串拼接一文中&#xff0c;我们介绍了几种Java中字符串拼接的方式&#xff0c;以及优缺点。其中还有一个重要的拼接方式我没有介绍&#xff0c;那就是Java 8中提供的S…

html5 内嵌网页_如何分析并优化网页的性能?新梦想软件测试

一个网站的网页是好是坏&#xff0c;往往是体现在速度和高度两个方面&#xff0c;速度是网页所展示出来的时间&#xff0c;能否为浏览用户节约时间。高度则是一个网站网页本身的质量&#xff0c;能否为浏览用户带来真正的好体验。然而看似简单的两个点&#xff0c;但是背后要实…