Main
第一步,对dataframe进行过滤.
第二步,对数据类型进行分类
第三步,构建模型,添加列
第四步,过滤出对应类型的DF,然后进行二分类计算
实现二分K-Means
静态变量
簇列:
scala
val clusterList:mutable.ListBuffer[DataFrame] = ListBufferDataFrame
参数:
- 簇表(mutable.Map[Double,DataFrame])(key: SSE,value:DF)
- 当前需要进行二分的DF(DataFrame)(簇表中SSE最大的DF)
- 需求分类数(不一定会分到这么多,如果所有簇的SSE都为0,即簇表为空,则可能中途结束分类)
- 基本K-Means算法最大迭代数(默认值为2)
- 迭代标记(默认值为1)
实现思路:
最大迭代数 = 需求分类数 - 1
case when 当迭代标记 <= 最大迭代数
删除列 e.g predction
使用基本K-Means算法,将该簇分为为两个簇,得到模型
将模型转为DF
根据prediciton将模型分为两个DF,放入list: ListBuffer
遍历list,计算每一个DF的SSE
- 如果 SSE == 0.0,则直接将该DF放入簇列clusterList中
- 否则:
- 判断簇表中时候包含该SSE的key,包含则给该SSE添加随机数以区分
- 将数据添加到簇表
判断簇表时候为空
- 为空,结束循环,使其进入处理阶段
- 获取簇表中最大SSE的对应DF,继续二分类计算.
case when 当迭代标记 > 最大迭代数,
- 将簇表中的元素放入簇列(mutable.ListBuffer[DataFrame])中
- 遍历簇列,将predection的值进行修改
- select md5对id进行加密作为rowKey字段,predection字段
- 结果写入hbase