向MapReduce转换:通过部分成绩计算矩阵乘法
2017-07-20 19:20
225 查看
代码共分为四部分:
<strong><span style="font-size:18px;">/*** * @author YangXin * @info 封装共现关系列 */ package unitSix; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.mapreduce.Mapper; import org.apache.mahout.cf.taste.hadoop.item.VectorOrPrefWritable; import org.apache.mahout.math.VectorWritable; public class CooccurrenceColumnWrapperMapper extends Mapper<IntWritable, VectorWritable, IntWritable, VectorOrPrefWritable>{ public void map(IntWritable key, VectorWritable value, Context context) throws IOException, InterruptedException{ context.write(key, new VectorOrPrefWritable(value.get())); } } </span></strong>
<strong><span style="font-size:18px;">/*** * @author YangXin * @info 切割用户数量 */ package unitSix; import java.io.IOException; import java.util.Iterator; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.mapreduce.Mapper; import org.apache.mahout.cf.taste.hadoop.item.VectorOrPrefWritable; import org.apache.mahout.math.VarLongWritable; import org.apache.mahout.math.Vector; import org.apache.mahout.math.VectorWritable; public class UserVectorSplitterMapper extends Mapper<VarLongWritable, VectorWritable, IntWritable, VectorOrPrefWritable>{ public void map(VarLongWritable key, VectorWritable value, Context context) throws IOException, InterruptedException{ long userID = key.get(); Vector userVector = value.get(); Iterator<Vector.Element> it = userVector.nonZeroes().iterator(); IntWritable itemIndexWritable = new IntWritable(); while(it.hasNext()){ Vector.Element e = it.next(); int itemIndex = e.index(); float preferenceValue = (float)e.get(); itemIndexWritable.set(itemIndex); context.write(itemIndexWritable, new VectorOrPrefWritable(userID, preferenceValue)); } } }</span></strong>
<strong><span style="font-size:18px;">/*** * @author YangXin * @info 计算部分推荐向量 */ package unitSix; import java.io.IOException; import java.util.List; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.mapreduce.Mapper; import org.apache.mahout.cf.taste.hadoop.item.VectorAndPrefsWritable; import org.apache.mahout.math.VarLongWritable; import org.apache.mahout.math.Vector; import org.apache.mahout.math.VectorWritable; public class PartialMultiplyMapper extends Mapper<IntWritable, VectorAndPrefsWritable, VarLongWritable, VectorWritable>{ public void map(IntWritable key, VectorAndPrefsWritable vectorAndPrefsWritable, Context context) throws IOException, InterruptedException{ Vector cooccurrenceColumn = vectorAndPrefsWritable.getVector(); List<Long> userIDs = vectorAndPrefsWritable.getUserIDs(); List<Float> prefValues = vectorAndPrefsWritable.getValues(); for(int i = 0; i < userIDs.size(); i++){ long userID = userIDs.get(i); float prefValue = prefValues.get(i); Vector partialProduct = cooccurrenceColumn.times(prefValue); context.write(new VarLongWritable(userID), new VectorWritable(partialProduct));; } } } </span></strong>
<strong><span style="font-size:18px;">/*** * @author YangXin * @info 实现部分成绩的combiner */ package unitSix; import java.io.IOException; import org.apache.hadoop.mapreduce.Reducer; import org.apache.mahout.math.VarLongWritable; import org.apache.mahout.math.Vector; import org.apache.mahout.math.VectorWritable; public class AggregateCombiner extends Reducer<VarLongWritable, VectorWritable, VarLongWritable, VectorWritable>{ public void reduce(VarLongWritable key, Iterable<VectorWritable> values, Context context) throws IOException, InterruptedException{ Vector partial = null; for(VectorWritable vectorWritable : values){ partial = partial == null ? vectorWritable.get() : partial.plus(vectorWritable.get()); } context.write(key, new VectorWritable(partial)); } } </span></strong>
相关文章推荐
- 向MapReduce转换:通过部分成绩计算矩阵乘法
- 通过MapReduce程序来实现计算学生平均成绩
- Hadoop 稀疏矩阵乘法的MapReduce计算
- 用opencv计算棋盘格内角点坐标(通过多个内角点获得转换矩阵),并同时用halcon和opnecv对图像进行透视变换
- 用opencv计算棋盘格内角点坐标(通过4个内角点获得转换矩阵),并同时用halcon和opnecv对图像进行透视变换
- MapReduce实现大矩阵乘法
- MapReduce实现矩阵乘法
- Java通过JNI调用CUDA矩阵乘法
- 通过两个坐标系对应点计算转换关系
- 【华为OJ】【098-矩阵乘法计算量估算】
- Mapreduce实现矩阵乘法
- 矩阵乘法计算量估算
- calc 计算 题解(矩阵乘法优化动态规划)
- 如果X大于0并小于65536,用移位法计算X乘以255的值?(通过二进制位移实现乘法或者除法)
- python 计算矩阵的转置 (通过解包的方式)
- 手把手教你用Execel计算两个矩阵的乘法
- java 多线程并行计算之矩阵乘法(星星笔记)
- 卷积转换为矩阵运算中填充数的计算-GEMM
- 六道题 : 1.设计一个函数,用来计算b的n次方 2.(n! = 1*2*3*4*...n) 3.(1! + 2! + 3! + 4! + ... + n!) 4.成绩 5. 数组中的元素逆序存放 6.九九乘法口诀
- 关于用mapreduce做kmeans聚类以及python的numpy和list做矩阵、向量乘法的速度对比