记一次百G数据的聚类算法实施过程

  • 时间:
  • 浏览:4
  • 来源:uu快3输钱_uu快3赢钱诀窍_豹子

http://blog.csdn.net/gamer_gyt/article/details/79135118

这里采用的策略是将全量数据rdd进行random split,有之后 for循环遍历split事先的rdd,进行saveAsTestFile,保存的目录之后设计

有了第二次的经验,想法之后怎么将数据条数差太大的分到同一组里,我采用的最好的土办法是进行统计,按照10的X次方形式进行分组,比如说

第一次尝试很天真,思路也很正常,如下:

1:全量加载数据,形成rdd

2:数据split事先,按key进行groupby

3:针对每个key(也之后类别ID)进行kmeans聚类和预测,并将结果写入hdfs

4:加载每个类别的结果,进行聚合形成最终结果

转载请注明出处:http://blog.csdn.net/gamer_gyt

博主微博:http://weibo.com/234654758

Github:https://github.com/thinkgamer

数据格式为三列,第一列为类别ID,第二列为商品ID,第三列为价格,数据格式如下

有之后 之后一定会另二个 疑问,之后之后合适符合正太分布,4、5、6之后的组里数据条数比较多,1、2、3和7、8、9之后的数据条数少,之后就会可能性4、5、6组的多多线程 运行运行时间较长,整体任务运行时间也较长。

数据有所以条,数据量为将近1150G,存储在hdfs上,第一列品类ID不唯一,每个品类ID下有多个商品ID,商品ID唯一,价格为浮点型数据

可能性是随机对类别 id 进行分组操作,这么不都也能保证没组中每个类别id对应的数据条数的合适一致性,也之后位于某个ID 数据条数不都也能几十条,而有之后 ID 数据条数千万条,你什儿 请况下就会愿因着代码在运行过程中,有之后 task快一点 运行完了,有之后 执行了哪天也没完事。

所以这里采用合并和拆分的策略,比如说将1,2,3合并到一组,4、5、6分别拆成两组,7、8、9合成一组,之后就会保证每组运行的时间是差太大的。(实际请况中,要根据数据的分布进行合理的拆分和合并)

在该思路的基础上进行改进:

既然rdd不都也能嵌套rdd使用,何不先得到所有的类别id,有之后 在全量数据总filter单个类别id进行kmeans操作呢?

http://blog.csdn.net/gamer_gyt/article/details/79157055

打开微信扫一扫,关注微信公众号【数据与算法联盟】

刚开始 写classify by ID 的代码,这里遇到了疑问是怎么让同另二个 类别ID的数据写到另二个 文件中,上网查了有之后 资料,都也能参考事先收集的笔记

该代码,测试,伪代码如下:

有之后 的相关笔记:

这里边有实现的最好的土办法,有之后 还有另二个 疑问,对全量数据(1150G)进行shuffle的事先,可能性数据量不得劲大,所以得劲占用资源,往往会出现有之后 内存上的错误。

之后话语,就都也能避免一定量数据 shuffle 耗费资源的疑问了,有之后 之后影响后续数据的使用,共同你什儿 步也会把类别id提取出来,保位于hdfs上,供下一步使用。

经历了上一步的数据准备,刚开始 step 2的开发,第二步的思路:

加载第一步保存的类别id list文件,分成5份,启动3个spark任务进行train,至此,思路是正确的,但却忽略了另二个 很严正的疑问:数据倾斜

Spark多路径输出和二次排序

这么刚开始 写代码。papapa写了一堆,发现groupBy事先的数据格式是CompactBuffer,转化成spark kmeans train所不都也能的格式事先,代码卡着不用动,不明所以(我估计是格式这么转正确,一定会kmeans 所不都也能的格式,有之后 可能性一定会kmeans 不都也能的格式,应该会报错呀),之后 当我把代码打包,提交到集群上运行时,提示我kmeans train所在的函数中这么指定master url,之后我明明指定了,之后 才发现是可能性,我在rdd操作过程中也能,嵌套了函数,函数中又重新使用了rdd,也之后说rdd 不都也能嵌套rdd使用,具体可参考 Spark 为哪几种 不允许 RDD 嵌套-如 RDD[RDD[T]],而我在本地测试时指的一定会local,这么进行报错,至此这条路行不通,也之后说不都也能按之后的思路执行

不都也能注意的是 leibieID_list.map 操作并一定会分布式的,之后for 循环,之后1150个类别id运行完,时间可想而知,是极其耗时的,所以这条路也失败了(一定会说行不通,是可能性耗时)

如题,记一次百G数据的聚类算法实施过程,用的技术一定会难,spark和kmeans,我让你 让他认为这这么哪几种难度,我接到你什儿 任务的事先也认为这么难度,之后一周事先我发现我错了,数据量1150G的确不大,但难度在于我不都也能对 kmeans 的 train过程执行将近1150次,有之后 不都也能高效的完成。这么疑问就来了,怎么保证高效和准确性。(声明小编对Spark也一定会说夹生悉)

至此,疑问否有最终避免了,相比之后的MR版本,时间缩减了将近8个小时,在整个优化的过程中,确实 对于经验足够的开发者来说,可能性快一点 就会避免,但对于让让当我们都 哪几种新手,可能性就要耗费些时间,涨涨记性了,在整个过程中对spark也否有有进一步的了解了。

经过里边的尝试发现不行,这么我让你 是一定会先全量读取数据,有之后 按照类别ID,将同另二个 类别ID的数据写到另二个 文件(可能性文件夹下),有之后 再对之操作

现在要对每个品类下的价格进行聚类,得到1~7个价格level(7level的价格要比6level的价格高,以此类推)