使用 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(" & ",","))));
}
}
完美 撒花