MapRduce 处理数据

使用 java 代码 来进行 分割后的 数据预处理 

1.  arraycopy()  方法

函数: arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src: 原数组                                 srcPos:原数组起始的位置

dest:目的数组                               destPos:目的数组的起始位置
                length:所需复制数组的长度

 注意:  要重新声明一个同类型且长度足够的数组   , 否则会出现异常。

例:

package itcast;
import java.util.Arrays;// 导包  要留意( 不要导错 )

public class ArrayOf_01 {
	public static void main(String[] args) {


		int[] a={9,8,7,6,5,4,33,22,11,52,13,14,520,521};

		int[] b=new int[8];      //注意数组的长度

		System.arraycopy(a, 0, b, 0, 8);

		System.out.println(Arrays.toString(b));
}
}

// System.arraycopy(a ,0 ,b ,0 ,8)这句话 翻译为:
// 把数组a从下标为0的位置依次开始复制到数组b下标为0的位置,复制长度为8。


//  输出的结果是:[9, 8, 7, 6, 5, 4, 33, 22]

//  arraycopy()方法的主要缺点是必须事先创建好目的数组。

2 .copyOf()方法

函数:   copyOf(oringinal, int newlength)
oringinal:原数组      newlength:复制数组的长度

从原数组的起始位置开始复制,复制的长度是newlength,
相比较于前一种,这种相当于特殊的情况,只能从原数组的起始位置开始复制.

例: 

package itcast;
import java.util.Arrays;
public class  ArrayOf_02 {
	public static void main(String[] args) {


		int[] a= {9,8,7,6,5,4,33,22,11,52,13,14,520};
		int[] b=new int[8];
		b=Arrays.copyOf(a, 8);
		System.out.println(Arrays.toString(b));


	}
}

// 输出的结果是 :[9, 8, 7, 6, 5, 4, 33, 22]

3.copyOfRange()方法

函数:copyOfRange(oringinal,int from, int to)
从 original  数组的 下标 from  开始复制,到 下标 to 结束

例: 

package itcast;
import java.util.Arrays;
public class  ArrayOf_03 {

	public static void main(String[] args) {
		


		int[] a= {9,8,7,6,5,4,33,22,11,52,13,14,520};
		int[] b=new int[8];
		b=Arrays.copyOfRange(a, 2, 10);
		System.out.print(Arrays.toString(b));


	}

//  输出的结果:[7, 6, 5, 4, 33, 22, 11, 52]
}

 

MapperReduce 处理数据  例 :

1、对原始数据进行预处理,格式为上面给出的预处理之后的示例数据。

通过观察原始数据形式,可以发现,每个字段之间使用 “:” 分割,视频可以有多个视频类别,类别之间&符号分割,且分割的两边有空格字符,同时相关视频也是可以有多个,多个相关视频也是用 “:” 进行分割。为了分析数据时方便,我们首先进行数据重组清洗操作。
即:将每条数据的类别用 “,” 分割,同时 去掉两边空格,多个“相关视频id”也使用 “,” 进行分割

package itcast;
import java.util.Arrays;

//  处理数据

public class MyMapper extends Mapper<LongWritable, Text,Text,Text> {
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String s = value.toString();
            String[] sp = s.split(":");
            String ss = "";
            String[] strings = Arrays.copyOfRange(sp, 0, 9);
            for (String string : strings) {
                ss += string + ":";
            }
            for (int i = 0; i <sp.length; i++) {
                if (sp[i].length()>=9){
                    ss+=sp[i]+",";
                }
        }
        context.write(new Text(sp[0]),new Text((ss.substring(0,ss.length()-1).replace(" & ",","))));
    }
}

完美 撒花 

发布了177 篇原创文章 · 获赞 288 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/bbvjx1314/article/details/103811248