最近在做使用mahout做协同过滤推荐的时候,发现无论是数据源还是推荐函数的改裤接口user_id必须孙滚是Long型的变量
由于业务提供的 user_id 是 uuid ,所以是个字符串类型,并且 item_id (做的是岗位推荐,即为job_id)也是 uuid 类型,于是另外再弄三张表 uid-uuid , jid-jjid , uid-jid-score 的映射,但是这样做实在太麻烦了,我分析用户日志存储用户偏好表还要再多维护所有用户和所有岗位表,遂开始研究 uuid 和 uid 能不能做个映射。
首先了解一下 UUID :
重点来了:
我现在需要处理的 uuid 就是这个 标准的UUID格式 ,了解了UUID的构成以后我们就好办了:
1. 首先将uuid去掉连接符,从原先的uuid格式字符串转化为没有连接符的16进制字符串
2. 将16进制字符串转化为10进制数(内部使用mahout接口)
用BigInt来存储这个唯一的十进制数,这核凯简样就构成了一种映射。
查了下python的内置uuid库的API用法:
这里我直接用 python 演示( python3 )
输出见下图
写完的时候google了一下发现墙外面也有不少讨论这个的,mahout官方也是说要做转换,直接用字符串类型进入推荐算法,效率会特别慢!
如下:
Why user id and item id must be long type ?
how to map uuid to userid in preference class to use mahout recommender
mahout-user mailing list archives:UUID based user IDs
参考:
Python 3.x 格式化输出字符串 % &format 笔记
python常用的十进制、16进制、字符串、字节串之间的转换
利用Mahout和Hadoop处理大规模数据规模问题在机器学习算法中有什么现实意义?让我们考虑你可能需要部署Mahout来解决的几个问题的大小。
据粗略估计,Picasa三年前就拥有了5亿张照片。 这意味着每天有百万级的新照片需要处理。一张照片的分析本身不是一个大问题,即使重复几百万次也不算什么。但是在学习阶段可能需要同时获取数十亿张照片中的信息,而这种规模的计算是无法用单机实现的。
据报道,Google News每天都会处理大约350万篇新的新闻文章。虽然它的绝对词项数量看似不大,但试想一下,为了及时提供这些文章,它们连同其他近期的文章必须在几分钟的时间内完成聚类。
Netflix为Netflix Prize公布的评分数据子集中包含了1亿个评分。因为这仅仅是针对竞赛而公布的数据,据推测Netflix为形成推荐结果所需处理的数据总量与之相比还要大出许多倍。
机器学习技术必须部署在诸如此类的应用场景中,通常输入数据量都非常庞大,以至于无法在一台计算机上完全处理,即使这台计算机非常强大。如果没有 Mahout这类的实现手段,这将是一项无法完成的任务。这就是Mahout将可扩展性视为重中之重的道理,以及本书将焦点放在有效处理大数据集上的原因,这一点与其他书有所不同。
将复杂的机器学习技术应用于解决大规模的问题,目前仅为大型的高新技术公司所考虑。但是,今天的计算能力与以往相比,已廉价许多,且可以借助于 Apache Hadoop这种开源框架更轻松地获取。Mahout通过提供构筑在Hadoop平台上的、能够解决大规模问题的高质量的开源实现以期完成这块拼图,并可为所有技术团体所用。
Mahout中的有些部分利用了Hadoop,其中包含一个流行的MapReduce分布式计算框架。MapReduce被谷歌在公司内部得到广泛使用 ,而Hadoop是它的一个基于Java的开源实现。MapReduce是一个编程范式,初看起来奇怪,或者说简单得让人很难相信其强大性。 MapReduce范式适用于解决输入为一组"键 值对"的问题,map函数将这些键值对转换为另一组中间键值对,reduce函数按某种方式将每个中间键所对应的全部值进行合并,以产生输出。实际上,许多问题可以归结为MapReduce问题,或它们的级联。这个范察罩式还相当易于并行化:所有处理都是独立的,因此可以分布到许多机器上。这里不再赘述 MapReduce,建议读者参考一些入门教程来了解它,如Hadoop所提供的
Hadoop实现了MapReduce范式,即便MapReduce听上去如此简单,这仍然银没竖称得上是一大进步。它负责管理输入数据、中间键值对以及输出数据的存储这些数据可能会非常庞大,并且必须锋大可被许多工作节点访问,而不仅仅存放在某个节点上。Hadoop还负责工作节点之间的数据分区和传输,以及各个机器的故障监测与恢复。理解其背后的工作原理,可以帮你准备好应对使用Hadoop可能会面对的复杂情况。Hadoop不仅仅是一个可在工程中添加的库。它有几个组件,每个都带有许多库,还有(几个)独立的服务进程,可在多台机器上运行。基于Hadoop的 *** 作过程并不简单,但是投资一个可扩展、分布式的实现,可以在以后获得回报:你的数据可能会很快增长到很大的规模,而这种可扩展的实现让你的应用不会落伍。
鉴于这种需要大量计算能力的复杂框架正变得越来越普遍,云计算提供商开始提供Hadoop相关的服务就不足为奇了。例如,亚马逊提供了一种管理Hadoop集群的服务 Elastic MapReduce,该服务提供了强大的计算能力,并使我们可通过一个友好的接口在Hadoop上 *** 作和监控大规模作业,而这原本是一个非常复杂的任务。
现在大数据培训班正常的线下面授班的收费一般都是在25000左右,学习时间是在6个月左右的时间。具体是收费要根据实际的情况去进行分析,不同的机构,城市,不同的授课模式,一般情况下收费也都是不相同的。
1、通常情况下,一线城市大数据培训班的收费相对来说要比二三线同类型的要贵一点,但是相对教学资源更加丰富;
2、正规的有名气的机构要芹野比那些没有名气的小机构收费多一些,实际差多少还要根据相关咨询进行了解;
3、不同的模式收费不同,现在主要是线上和线下两种大的类型,一般线下的要比线上的价格高一些,但是相关的服务也更好,学习效率也更高。
不管是大家想要选择什么样的大数据培训班,具体的收费是受到很多因素影响的,实际收费具体是多少还需要大家哗薯根据实际咨询进行了解乱首者才能够知道。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)