Spark XGBoost的一些问题

在使用Spark版本的xgboost的时候会有一些单机版本遇不到的问题,可能对使用的人造成一些困扰,经过两周的踩坑,总结一下,希望有帮助

1、输入、预测数据的一致性

Spark版本的XGBoost处理的输入可以是RDD或者DataFrame。由于Spark的机制,在没有显式指定的情况下,是不会保存RDD或者DataFrame的内容的。所以预测之后得到结果的RDD和原本输入的RDD不能够保证对应关系。所以建议对需要预测的RDD输入显式的persist,不太建议cache。


2、样本逐条预测

为了保证输入输出对应的一致性,可以想到可以通过或者XGBoost.booster,通过广播到每一个Executor,然后就可以比较高效的逐条预测,实验过程中发现失败率比较高,不太建议这么做。


3、样本中包含missing value的情况。

当样本中的某列变为Float.NaN的时候,会发现报一个XGBoost train failed的错误,查看每个Executor的情况,可以看到是由于OOM导致的Container错误。这个问题找了很久,最后每个Executor的core数量设置为1,内存为14G解决。  猜测处理missing data导致了对内存的需求变大。


4、CV

在Spark中XGBoost的CV 通常只能通过mllib的Pipeline来做。同时,Spark版本的XGBoost没有eval_list接口,所以每一步的train和test的loss不太直观。根据版本不同,有些版本配置eval_matric后,可以在Spark任务的stdout或者stderr中有每一步的train loss。有些版本则没有这个功能。


5、其他

Spark版本的XGBoost相对于单机版本API和开发完成度低很多,所以如果在单机多线程版本能够满足计算性能需求的情况下,不太建议使用Spark版本。对于Spark版本的XGBoost,官方说法最多支持5TB的数据输入,测试在1TB的数据情况下没有问题。


以上

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值