2016数据挖掘面试总结

2016年数据挖掘面试总结

1、数据倾斜:MapReduce、hive等

 避免数据倾斜

參数调节:

hive.map.aggr=true

Map 端部分聚合,相当于Combiner

hive.groupby.skewindata=true

有数据倾斜的时候进行负载均衡,当选项设定为 true。生成的查询计划会有两个 MR Job。

第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每一个 Reduce 做部分聚合操作。并输出结果,这样处理的结果是同样的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的。第二个 MR Job 再依据预处理的数据结果依照 Group By Key 分布到 Reduce 中(这个过程能够保证同样的 Group By Key 被分布到同一个 Reduce 中),最后完毕终于的聚合操作。

SQL语句调节:怎样Join:

关于驱动表的选取。选用join key分布最均匀的表作为驱动表

做好列裁剪和filter操作,以达到两表做join的时候,数据量相对变小的效果。

大小表Join:使用map join让小的维度表(1000条下面的记录条数) 先进内存。

在map端完毕reduce.

大表Join大表:把空值的key变成一个字符串加上随机数。把倾斜的数据分到不同的reduce上,因为null值关联不上,处理后并不影响终于结果。

count distinct大量同样特殊值

countdistinct时。将值为空的情况单独处理,假设是计算count distinct,能够不用处理。直接过滤。在最后结果中加1。

假设还有其它计算。须要进行group by,能够先将值为空的记录单独处理,再和其它计算结果进行union。

group by维度过小:採用sum() group by的方式来替换count(distinct)完毕计算。

特殊情况特殊处理:在业务逻辑优化效果的不大情况下,有些时候是能够将倾斜的数据单独拿出来处理。

最后union回去。

 

2、用户画像的分层,怎样形成良性闭环:

由微观到宏观,逐层分析。首先我们从微观来看,怎样给用户的微观画像进行分级呢?例如以下图所看到的。

总原则:基于一级分类上述分类逐级进行细分。

• 第一分类:人口属性、资产特征、营销特性、兴趣爱好、购物爱好、需求特征

• 第二分类...

• 第三分类...

• .......

 

3、随机森林算法參数的优化

生成决策树的个数、分裂属性的个数

randomForest包中的randomForest(formula, data,ntree, nPerm, mtry, proximity, importace)函数:随机森林分类与回归。ntree表示生成决策树的数目(不应设置太小。默觉得500);nPerm表示计算importance时的反复次数。数量大于1给出了比較稳定的预计,但不是非常有效(眼下仅仅实现了回归);mtry表示选择的分裂属性的个数;proximity表示是否生成邻近矩阵,为T表示生成邻近矩阵;importance表示输出分裂属性的重要性。

 

4、C4.5信息增益率怎么推理,决策树的參数选择

控制以下几个參数选择最佳的模型

minsplit控制一个节点最小权重和以便进行切割。minbusket设置了一个叶子节点最小权重和。maxsurrogate表示替代分裂点的数量以便用于评估;maxdepth控制决策树的深度。当中,minsplit/minbusket能够设置为训练集的1/100,这些參数的值能够依据商业问题、领域专家的经验、数据、运行算法须要的合理时间以及决策树的期望规模来设置。

 

5、hbase的原理,以及Zookeeper的作用,怎样定位一个cell(单元)

6、聚类:

层次距离选择,通过距离矩阵来聚类

 

7、算法的优化过程:

 

8、小游戏

1)10     5      2      1 四人过桥的时间,一次仅仅能过两人。仅仅有一个手电筒,每次过桥须要用到手电筒。最少的过桥时间

2)5 升    3升两个容量大小的杯子,怎么倒出4升水

3)有       有    有    无    无    无,有表示杯子中有水。无表示杯子中无水;仅仅能动一个杯子的情况下。使有水和无水相间隔

4)1到100已经标记并从小到大排好序的小球。两个人按顺序抽取。一次能够抽取1到5个球,假设让你先抽。什么情况下保证你永远都能抽取到第100号球。

5)九宫格

 

9、数据挖掘的系统架构

 

10、sparkR是不是每台机器上都须要安装并载入包;spark的工作流程。RDD的

Spark优化,actor操作与线程的优化

 

11、用户画像的标签系统多久更新一次

 

12、GBM,梯度下降的条件:必须是 凸函数

13、hashmap的原理

14、二分法查找

15、aabbcddfchgh找出仅仅出现一次的字母

16、一段文件分好词后并按次序放入到一个list中,求出I love China的最短距离,不考虑大写和小写(使用指针)

17、应用算法的详细业务流程

18、贝叶斯公式、贝叶斯文本分类

19、m行n列的日志,统计列数为6的行数

20、欧式距离与余弦距离的差别

21、组合索引的差别:A和B上建立组合索引,查询AB、A和B 哪个最快、哪个最慢   AB>A>B

22、表连接查询。小表在前的原理,map join与其它join的差别

Mapjoin是一种避免避免数据倾斜的手段

同意在map阶段进行join操作。MapJoin把小表所有读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,因为在map是进行了join操作。省去了reduce执行的效率也会高非常多

在《hivejoin遇到问题》有详细操作

在对多个表join连接操作时。将小表放在join的左边。大表放在Jion的右边,

在运行这种join连接时小表中的数据会被缓存到内存其中,这样能够有效降低发生内存溢出错误的几率


posted @ 2017-08-07 18:49  llguanli  阅读(365)  评论(0)    收藏  举报