2
외부 속성 파일에서 차원을 가져 오는 동적 맵 축소 응용 프로그램을 만들려고합니다. 가장 큰 문제는 변수 등, 키가 복합되며 4 키의 어떤 숫자 3 키의 예를 들어 쌍, 쌍의 수 있습니다, 즉 사실에있다Hadoop MapReduce에서 ArrayWritable 키로
내 매퍼 :
public void map(AvroKey<flumeLogs> key, NullWritable value, Context context) throws IOException, InterruptedException{
Configuration conf = context.getConfiguration();
int dimensionCount = Integer.parseInt(conf.get("dimensionCount"));
String[] dimensions = conf.get("dimensions").split(","); //this gets the dimensions from the run method in main
Text[] values = new Text[dimensionCount]; //This is supposed to be my composite key
for (int i=0; i<dimensionCount; i++){
switch(dimensions[i]){
case "region": values[i] = new Text("-");
break;
case "event": values[i] = new Text("-");
break;
case "eventCode": values[i] = new Text("-");
break;
case "mobile": values[i] = new Text("-");
}
}
context.write(new StringArrayWritable(values), new IntWritable(1));
}
값은 나중에 좋은 논리를 갖습니다.
내 StringArrayWritable :
public class StringArrayWritable extends ArrayWritable {
public StringArrayWritable() {
super(Text.class);
}
public StringArrayWritable(Text[] values){
super(Text.class, values);
Text[] texts = new Text[values.length];
for (int i = 0; i < values.length; i++) {
texts[i] = new Text(values[i]);
}
set(texts);
}
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
for(String s : super.toStrings()){
sb.append(s).append("\t");
}
return sb.toString();
}
}
오류 나는 점점 오전 : 어떤 도움을 크게 감상 할 수
Error: java.io.IOException: Initialization of all the collectors failed. Error in last collector was :class StringArrayWritable
at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:414)
at org.apache.hadoop.mapred.MapTask.access$100(MapTask.java:81)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:698)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:770)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.ClassCastException: class StringArrayWritable
at java.lang.Class.asSubclass(Class.java:3165)
at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:892)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.init(MapTask.java:1005)
at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:402)
... 9 more
.
고마워요.
compareTo() 함수의 기능이 실제로 무엇인지 설명해 주실 수 있습니까? Btw 덕분에 멍청한 놈을 도와 주셔서 감사합니다 ... :) –
글쎄 mapreduce는 키를 정렬하고 그룹화하는 방법을 알아야합니다. Javadocs의 설명은 https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html에서 자세히 설명합니다. hadoop 소스 코드를 포함하여 인터넷에 도움이되는 많은 리소스가 있습니다. https://github.com/apache/hadoop/tree/trunk/hadoop-common-project/hadoop-common/src/main/java/ org/apache/hadoop/io. 따라서 키를 정렬하는 방법을 생각해야합니다. –