在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.

进入 $MAVEN_HOMEconfrepositorymldmlc 找到 xgboost4j

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

用winRAR打开.

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

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

criteo-forks/xgboost-jars​github.com

点击红框下载jar包。

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

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

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

如果提示文件正在被使用,无法修改,请关闭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 . 程序运行卡着不动的情况

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

master('local[m]')

work_number(n)

一定要 m >= n

三,运行结果

原标签: classIndex

预测标签 : prediction

真特喵的不容易~~~

参考资料:

sgboost AIP官方文档

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

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

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

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

  1. Mac笔记本idea打包maven工程,本地环境运行正常,打包成功,却启动不成功

    记录一下: Mac笔记本使用idea打包maven工程, 本地环境运行正常,打包成功,却启动不成功: window打包成功且启动正常: 查询启动错误日志是由于zookeeper null指针的问题,但 ...

  2. 《循序渐进学Spark》一1.6 使用Spark Shell开发运行Spark程序

    本节书摘来自华章出版社<循序渐进学Spark>一书中的第1章,第1.6节,作者 小象学院 杨 磊,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.6 使用S ...

  3. 使用Spark Shell开发运行Spark程序

    使用Spark Shell开发运行Spark程序 Spark Shell是一种学习API的简单途径,也是分析数据集交互的有力工具. 虽然本章还没涉及Spark的具体技术细节,但从总体上说, Spark ...

  4. spark on yarn模式下SparkStream整合kafka踩的各种坑(已解决)_fqzzzzz的博客

    项目场景: 使用sparkStream接收kafka的数据进行计算,并且打包上传到linux进行spark任务的submit 错误集合: 1.错误1: Failed to add file:/usr/ ...

  5. 如何在虚拟linux环境运行python_Python 虚拟环境 | Mac/Linux下如何避坑安装配置Virtualenv...

    1.为什么要使用虚拟环境 在Python中,不同的应用可能需要用到不同版本的第三方包,而这些第三方包被统一存放到目录site-packages中,不同版本的包容易相互覆盖,如安装Django 2.1时 ...

  6. Spark ShuffleManager内存缓冲器SortShuffleWriter设计思路剖析-Spark商业环境实战

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...

  7. Spark PersistenceEngine持久化引擎与领导选举代理机制内核原理深入剖析-Spark商业环境实战...

    本套系列博客从真实商业环境抽取案例进行总结和分享,并给出Spark源码解读及商业实战指导,请持续关注本套博客.版权声明:本套Spark源码解读及商业实战归作者(秦凯新)所有,禁止转载,欢迎学习. Sp ...

  8. Intellij IDEA使用Maven搭建spark开发环境(scala)

    如何一步一步地在Intellij IDEA使用Maven搭建spark开发环境,并基于scala编写简单的spark中wordcount实例. 1.准备工作  首先需要在你电脑上安装jdk和scala ...

  9. maven依赖 spark sql_Spark开发实例

    本文将介绍如何实际动手进行 RDD 的转换与操作,以及如何编写.编译.打包和运行 Spark 应用程序. 启动 Spark Shell Spark 的交互式脚本是一种学习 API 的简单途径,也是分析 ...

最新文章

  1. javascript对表单的操作
  2. python turtle画椭圆-python turtle 绘制太极图的实例
  3. 在阿里云的ubuntu上部署个人服务
  4. oracle连接外部数据库_使用Oracle验证外部数据
  5. RabbitMQ六种队列模式-工作队列模式
  6. 别再瞎搞了,处理Java异常的10个最佳实践
  7. vmare 如何与主机共享相应的文件
  8. Keil5二步解决中文乱码,注释乱码问题
  9. 代管挂账业务,没有做代管挂账确认单是否可以暂估入账
  10. 历届试题 填字母游戏
  11. 为招商手机银行点个赞!
  12. 三年磨一剑:蚂蚁金服的研发效能洞察实践
  13. win10防火墙打不开,设置是灰色的、edge闪退、应用商店灰色等问题
  14. 哈理工院赛-小乐乐搭积木
  15. ❤唯美满天星❤ html+css+js炫酷3D相册(含音乐/可自定义文字)程序员表白必备
  16. 如何上线自己的第一个网站?
  17. PR18-8D接近开关
  18. 硬件设计32之VGA、DVI、HDMI及DP介绍
  19. 【BZOJ2400】Optimal Marks
  20. 图片或PDF转化为文字文本免费软件推荐

热门文章

  1. 使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件
  2. 计算机的硬件性能指标(图片部分资源摘自王道考研资料)
  3. php 生成器作用,php 生成器的理解和使用
  4. ad17编辑界面怎么检查未连线_软件账务处理流程之——凭证审核与检查
  5. element-ui select
  6. ltp makefile 解析
  7. Javascript引擎单线程机制及setTimeout执行原理说明
  8. [Leedcode][JAVA][第98题][验证二叉搜索树]
  9. [Leedcode][JAVA][第1248题][统计「优美子数组][找规律]
  10. [CodeForces-1138B] *Circus 解方程|数学