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 Setarchive.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.
![](/assets/blank.gif)
进入 $MAVEN_HOMEconfrepositorymldmlc 找到 xgboost4j
![](/assets/blank.gif)
找到你使用的版本,这里使用的是8.1,点击。
![](/assets/blank.gif)
用winRAR打开.
![](/assets/blank.gif)
发现确实缺少 File /lib/xgboost4j.dll文件。
进入点击以下链接。选择你使用的版本
criteo-forks/xgboost-jarsgithub.com
![](/assets/blank.gif)
点击红框下载jar包。
![](/assets/blank.gif)
下载完成后,解压,你会在lib文件夹下找到这个文件。
![](/assets/blank.gif)
用WinRAR打开xgboost4j-8.1.jar之后,把下载的 xgboost4j-0.81-criteo-20180821_2.11-win64.jarlib 中的xgboost4j.dll 直接拉进MAVEN_HOMEonfrepositorymldmlcxgboost4j0.81xgboost4j-8.1.jarbin里
在尝试运行一下,问题解决。
![](/assets/blank.gif)
如果提示文件正在被使用,无法修改,请关闭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 . 程序运行卡着不动的情况
![](/assets/blank.gif)
![](/assets/blank.gif)
出现这种情况就是你在初始化spark master的时候给的线程数小于你的work_number,切记:
master('local[m]')
work_number(n)
一定要 m >= n
三,运行结果
![](/assets/blank.gif)
原标签: classIndex
预测标签 : prediction
真特喵的不容易~~~
参考资料:
sgboost AIP官方文档
XGBoost4J-Spark Tutorial (version 0.8+)xgboost.readthedocs.io
一个情况和我类似的国际友人
https://github.com/dmlc/xgboost/issues/2780github.com
maven依赖 spark sql_window环境运行spark-xgboost 8.1踩到的坑相关推荐
- Mac笔记本idea打包maven工程,本地环境运行正常,打包成功,却启动不成功
记录一下: Mac笔记本使用idea打包maven工程, 本地环境运行正常,打包成功,却启动不成功: window打包成功且启动正常: 查询启动错误日志是由于zookeeper null指针的问题,但 ...
- 《循序渐进学Spark》一1.6 使用Spark Shell开发运行Spark程序
本节书摘来自华章出版社<循序渐进学Spark>一书中的第1章,第1.6节,作者 小象学院 杨 磊,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.6 使用S ...
- 使用Spark Shell开发运行Spark程序
使用Spark Shell开发运行Spark程序 Spark Shell是一种学习API的简单途径,也是分析数据集交互的有力工具. 虽然本章还没涉及Spark的具体技术细节,但从总体上说, Spark ...
- spark on yarn模式下SparkStream整合kafka踩的各种坑(已解决)_fqzzzzz的博客
项目场景: 使用sparkStream接收kafka的数据进行计算,并且打包上传到linux进行spark任务的submit 错误集合: 1.错误1: Failed to add file:/usr/ ...
- 如何在虚拟linux环境运行python_Python 虚拟环境 | Mac/Linux下如何避坑安装配置Virtualenv...
1.为什么要使用虚拟环境 在Python中,不同的应用可能需要用到不同版本的第三方包,而这些第三方包被统一存放到目录site-packages中,不同版本的包容易相互覆盖,如安装Django 2.1时 ...
- Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战
本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...
- Spark PersistenceEngine持久化引擎与领导选举代理机制内核原理深入剖析-Spark商业环境实战...
本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...
- Intellij IDEA使用Maven搭建spark开发环境(scala)
如何一步一步地在Intellij IDEA使用Maven搭建spark开发环境,并基于scala编写简单的spark中wordcount实例. 1.准备工作 首先需要在你电脑上安装jdk和scala ...
- maven依赖 spark sql_Spark开发实例
本文将介绍如何实际动手进行 RDD 的转换与操作,以及如何编写.编译.打包和运行 Spark 应用程序. 启动 Spark Shell Spark 的交互式脚本是一种学习 API 的简单途径,也是分析 ...
最新文章
- javascript对表单的操作
- python turtle画椭圆-python turtle 绘制太极图的实例
- 在阿里云的ubuntu上部署个人服务
- oracle连接外部数据库_使用Oracle验证外部数据
- RabbitMQ六种队列模式-工作队列模式
- 别再瞎搞了,处理Java异常的10个最佳实践
- vmare 如何与主机共享相应的文件
- Keil5二步解决中文乱码,注释乱码问题
- 代管挂账业务,没有做代管挂账确认单是否可以暂估入账
- 历届试题 填字母游戏
- 为招商手机银行点个赞!
- 三年磨一剑:蚂蚁金服的研发效能洞察实践
- win10防火墙打不开,设置是灰色的、edge闪退、应用商店灰色等问题
- 哈理工院赛-小乐乐搭积木
- ❤唯美满天星❤ html+css+js炫酷3D相册(含音乐/可自定义文字)程序员表白必备
- 如何上线自己的第一个网站?
- PR18-8D接近开关
- 硬件设计32之VGA、DVI、HDMI及DP介绍
- 【BZOJ2400】Optimal Marks
- 图片或PDF转化为文字文本免费软件推荐
热门文章
- 使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件
- 计算机的硬件性能指标(图片部分资源摘自王道考研资料)
- php 生成器作用,php 生成器的理解和使用
- ad17编辑界面怎么检查未连线_软件账务处理流程之——凭证审核与检查
- element-ui select
- ltp makefile 解析
- Javascript引擎单线程机制及setTimeout执行原理说明
- [Leedcode][JAVA][第98题][验证二叉搜索树]
- [Leedcode][JAVA][第1248题][统计「优美子数组][找规律]
- [CodeForces-1138B] *Circus 解方程|数学