说明
以下内容来自群中出现的问题,大家讨论的结果
Q群:432600958
微信群:加微信w3aboutyun,附上about云铁粉
2018.04.13_01
问题描述
面试资源题目分享
下午喝完一杯饮料的时间,被叙利亚的新闻刷频了。
美国发射了导弹,俄罗斯拦截了部分,剩下的都打在已经疏散了民众的区域内。
据报道,受伤了6个人,无人员死亡,万幸。
想到前几日的看到的叙利亚杜马镇“化物事件”的会议,叙利亚:这些化学物质永远只攻击女人和孩子,它都学会区分武装人员了?! 叙利亚大使压抑着愤怒,在控诉着那些假装道义,却伤天害理,颠倒黑白的不公时,美国等相关国家人员,却傲慢的离场。从叙利亚大使的身上,仿佛看到了近百年前,拒绝在凡尔赛合约上签字的顾维钧先生的身影。世界还是那个世界,只是中国不再是那个中国。
弱国无外交,这是对的,却不应该是正确的。愿世界和平,王道于行。
基本上所有的互联网公司都有其广告投放平台,这是给广告主投放广告的一个页面。广告主可以通过广告提交页面提交自己的广告需求,后台会给广告主圈定一部分潜在用户,这个就是我们称为Lookalike的模块。
lookalike 不是某一种特定的算法,而是一类方法的统称,这类方法综合运用多种技术,最终达到目的。
第一种就是显性的定位,广告主根据用户的标签直接定位
比如说通过年龄、性别、地域这样的标签来直接圈定一部分用户进行投放。这个时候我们的技术支持就是后台的用户画像的挖掘。
第二种做法,通过一个机器学习的模型,来定位广告主的潜在用户
广告主提交一批客户名单,我们称之为种子用户,它作为机器学习的正样本。负样本我们会从非种子用户,或者是说平台会积累历史的一些相似的广告作为负样本,这个问题就转化为一个二分类的模型,正负样本组成学习的样本,训练模型之后,利用模型结构对活跃用户进行打分,最后得到广告主需要的目标人群。
在Kmeans 预处理之前的数据预处理部分,需要做一次类似percent_rank() 操作。
举个例子,输入一条记录为user_1,key1,value_1
输入多条记录
按照key1 聚合之后,结果为key1,list[value1,value2…..]
将list 排序,并获取count 结果为 key1,count,list
然后计算user1 这条记录的rank = index(value1)/count
1 | val ah_freqlist_dic_old = user_ah_freq_dic.map(x=>(x._1._2,Nil:+x._2)) |
上述代码在实现的时候效率极低。
若在maven 中配置了
1 | <plugin> |
注意这一行,最好标注小版本 2.10.6
对方提供的LDA 聚类程序,是基于Spark 2.x 的,但是,我们的生产环境是Spark 1.6。 恩那么问题就来了,怎么让基于Spark 2.x 的代码在Spark 1.6 上跑起来。第一个想法是,只要把SparkSession 改为SparkContext 和 SQLContext 就行了。然后发现自己真的图样图森破。对方非常高端的使用了ml库,当然这不是问题。对方是用python 写的,当然这也不是问题毕竟小学生都要学python了,作为一个程序员不会python 就说不过去了对方的python 版本是2.7,当然这更不是问题。但是当你遇到需要将python 2.7 写的基于Spark 2.x ml 写的代码迁移到spark 1.6 上的时候,就有问题了。他喵的,老子都要精分了,一直在python 2.7 python 3.0 spark 1.6 spark2.2 版本间切换,在java,scala ,python 语言间切换
任务到手,谋定后动,当然先开始分析。
1 | spark = SparkSession.builder.master('yarn') \ |
之前断断续续,用Spark MLlib 做了将近两个月的数据挖掘,记录点东西。
在数据挖掘操作前,需要明确,通过这些计算,你希望从这一堆数据中获取到什么。不然只是每个算法跑一遍,也只能证明你调用Spark API 的能力合格了。
在最开始的时候,进入了一个误区,以为社区炒的火热的Spark是全知全能的。数据挖掘什么的,Spark就能搞定了。然而,Spark毕竟只是一个工具,使用工具归根结底还是人。最开始,只是想掌握Spark这种技术而已,从而忽视了数据挖掘的目的(当然,这也和团队构成有关,一个产品经理加我一个研发,总觉得和业务相关的事由产品经理去实现就行。。。 图样图森破啊 )