最近在开发一版基于协同过滤算法的推荐系统,需要用到历史7天的搜索和所有历史订单数据,几十亿的数据参与运算。采用spark2.0.2版本的mllib.linalg.distributed模块。

该模块包含BlockMatrix,CoordinateMatrix,IndexedRowMatrix,RowMatrix四种矩阵,各矩阵之间可通过BlockMatrix相互转化,BoockMatrix矩阵实现了矩阵乘法,CoordinateMatrix实现了各维度间的余弦相似度,后发现该模块有以下问题待完善:

1. CoordinateMatrix 的columnSimilarities()方法用来计算每两列之间的余弦相似度,原始数据为n*31的矩阵,计算每两列的余弦相似度,理论上得到一个31*31的对称矩阵,对角线值为1(相同维度余弦相似度为1),及31*31=961个值,实际得到的是一个上三角稀疏矩阵,只有465个值,后续如果直接使用该矩阵运算就会造成维度减少以及数据不准确的问题。

2. BlockMatrix multiply求矩阵乘法时,官网上给出下面一段注释

If other contains SparseMatrix, they willhave to be converted to a DenseMatrix.The output BlockMatrix will only consist of blocks of DenseMatrix. This maycause some performance issues until support for multiplying two sparse matricesis added.

就是两个相乘的矩阵必须都是稠密的,因为结果中之会包含稠密矩阵的Block。但是其它几种矩阵的toBlockMatrix()方法,转成的都是稀疏矩阵。这里spark出现了自相矛盾的情况。

解决方法:

上述两个算法都可以通过spark core实现,本人首先尝试了使用笛卡尔积的方式,发现运行速度超慢。后改为将小的矩阵做成广播变量,运行速度很快。解决了上述问题。

spark分布式矩阵采坑记相关推荐

  1. Taro小程序采坑记

    Taro,京东凹凸实验室出品的适配多端的一个框架, Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种多样,Web.React-Native.微信小程序等各种端 ...

  2. Android平台招商银行“一网通”支付对接采坑记

    公司最近的App中需要做支付功能,支付中需要支持微信支付.支付宝支付.一网通支付.本文主要记录在对接Android平台中的"一网通"过程中遇到的坑,如果有类似需求的朋友,可供你参考 ...

  3. SpringBoot + Spark on Yan踩坑记

    终极目标 采用SpringBoot集成SparkStreaming+Kafka+Redis+HDFS等组件,打包成jar(下文将之简称为"应用"),运行在Spark on Yan环 ...

  4. centos7.4.3 部署python-pcl亲测可用(采坑记)

    最近工作里用到PCL库,处理点云数据.点云抽稀能极大的减少点云数据. 通过python-pcl调用C++的PCL库.windows下运行ok,linux下部署踩了很多坑,试了多种办法,包括源码安装,都 ...

  5. 禅道和xxd(喧喧)两台主机服务器采坑记!

    禅道之前安装采用官方推荐的文章:Centos7.4系统下安装httpd,mariadb,php7.1环境运行禅道 而不是(推荐)linux用一键安装包 所以坑大了 Centos7.4系统下安装http ...

  6. 微信支付--采坑记(1)

    随着互联网的兴起,网上支付已经风靡了各个角落,然而移动支付中比较火的当然属于微信支付了. 今天跟大家分享一下微信开发中所遇到的一些问题. 1.首先在微信下载微信支付的SDK, 最好下载最新的SDK, ...

  7. input change获取改变之前的值和改变之后的值_input[type=#x27;number#x27;],ios安卓采坑记

    近日,在为公司维护移动端H5代码的过程中,因为平台实现的差异,中间踩了不少坑.借此机会记录一下,也希望大家能有个了解,少走弯路.这一切的一切,都要从一个简单的需求开始说起. 某日,产品.测试反馈,对于 ...

  8. 几行代码把Chrome搞崩溃之:HTML5 MP3录音由ScriptProcessorNode升级成AudioWorkletNode采坑记

    关键词: STATUS_ACCESS_VIOLATION AudioContext AudioWorkletNode audioWorklet addModule resume suspended c ...

  9. Pytorch转ONNX采坑记:Converting a tensor to a Python boolean might cause the trace to be incorrect. We...

    如果你用Pytorch定义的网络结构太过于灵活,那么转成ONNX的时候很有可能出错.这个报错通常情况下是你的网络结构中出现if else 语句.比如 if cfg.CUDA:eps = torch.c ...

最新文章

  1. 一文详尽2019全年AI技术突破
  2. 怎样检查Android网络连接状态
  3. mount:在/dev/sr0上找不到媒体
  4. Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信
  5. pictureselector 图片路径_AI图片无损放大软件
  6. Pure Pursuit trajectory tracking and Stanley trajectory tracking总结与比较
  7. Dart 语言基础入门 Dart 语言核心库一览
  8. html div三角形,【div】纯CSS绘制三角形
  9. Eclipse JPA Project创建
  10. Mongodb在windows下通过配置文件配置和访问
  11. [ZT]CCNA课堂精简笔记 2
  12. 转载:如何开发高性能低成本的网站之技术选择
  13. Atitit 项目管理软件 在线服务 attilax总结 1. 项目管理协作的历史 1 1.1. Worktile 406k 1 1.2. Teambition  584k in baidu
  14. python循环引用例子_魔幻离现实仅一步之遥:细说Python的循环调用、循环引用和循环导入...
  15. DAVINCI DM6446 开发攻略——V4L2视频驱动和应用分析
  16. android enable ipv6,安卓开启ipv6网络支持小米手机(miui)IPv6无法使用的问题
  17. 关于springcloud中eureka报错com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException:
  18. 中兴ZXD2400电源电路图图纸 图纸 线路图不是PCB图
  19. S7-1200通过FB284控制V90时,反馈的实际速度换算方法
  20. java mifare_java – NTAG212 Mifare Ultralight与身份验证

热门文章

  1. uniapp 埋点(友盟)
  2. javascript代码前端debug调试方法
  3. mac系统docker发布镜像报错:错误the user name or passphrase you entered is not correct解决
  4. 静态分析工具PMD使用说明
  5. 985计算机英语六级,大学英语六级比四级难多少?985学长含泪告诉你!
  6. 响应式设计的三个步骤
  7. Konga 使用说明
  8. 混IT,必须理解“甲方乙方”
  9. 采用以太坊智能合约技术的报名系统源码
  10. 下列不属于计算机未来发展趋势的是,1-9 关于计算机的发展趋势,下面哪种不是未来发展趋势 ____________ 。_学小易找答案...