Cómo programar hadoop
MR personalizado implementa la siguiente lógica
product_no lac_id moment start_time user_id County_id Staytime city_id13429100031 22554 8 2013-03-11 08:55:.19.151754088 571 571 282 571
13429100082 22540 8 2013-03-11 08:58:20.152622488 571 571 270 571
13429100082 22691 8 2013-03-11 08:56:.37.149593624 571 571 103 571
13429100087 22705 8 2013-03-11 08:56:51.139539816 571 571 220 571
13429100087 22540 8 2013-03-11 08:55: 2013-03-11 08 : 56:51.45.150276800 571 571 66 571
13429100082 22540 8 2013-03-11 08:55:38.140225200 571 571 133 571
13429100140 26642 9 2013-03-11 09:0 :.19.151754088 571 571 18 571
13429100082 22691 8 2013-03-11 08:57:32.151754088 571 571 287 571
13429100189 22558 8 2013-03-11 08:56: .2 4.139539816 571 571 48 571
13429100349 22503 8 2013-03-11 08: 54: 30.152622440 571 571 511 211 5711234567891011
Explicación de campo:?
Producto: el usuario móvil del usuario número de teléfono ?
lac_id: la estación base del usuario ?
start_time: la hora de inicio del usuario en esta estación base;?
tiempo de permanencia: ¿el tiempo de permanencia del usuario en esta estación base?
Requisitos: ?
Comprender la ubicación actual del usuario según lac_id y start_time, y aprender en función on Staytime El tiempo de permanencia del usuario en cada estación base. La ubicación del usuario se puede conocer en función de la trayectoria.
De acuerdo con la trayectoria y el tiempo de permanencia de estaciones base consecutivas, finalmente podemos obtener el tiempo que cada usuario permanece en cada estación base en orden cronológico.
Ejemplo de resultado esperado:
13429100082 22540 8 2013-03-11 08:58:20.152622488 571 571 270 571
13429100082 22691 8 2013-03-11 08:56:37.149593624 571 571 390 571
13429100082 22540 8 2013-03-11 08:55:38.140225200 571 571 133 571
13429100087 2705 8 2013-03-11 08: 56: 51.139539816 571 571 220 571
13429100087 22540 8 2013-03-11 08: 55: 45.150276800 571 571 66 57112345
Analizar los resultados anteriores :? > La primera columna está en orden ascendente y la cuarta columna está en orden descendente por tiempo. Por lo tanto, primero debe extraer estas dos columnas y luego personalizar la clasificación.
La implementación específica es la siguiente:
paquete FindFriend; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; URI URI; importar java.net.URISyntaxException; importar java.util.regex.Matcher; importar org.apache.hadoop.Pattern; .util.regex.Matcher; importar java.net.URISyntaxException; importar java.net.URISyntaxException; util.regex .Pattern.FileOutputFormat;public class StringComp2 {
* Este método se llama cuando se ordena k2.
* Cuando la primera columna es diferente, ordena en orden ascendente; cuando la primera columna es igual, ordena la segunda columna en orden descendente
*/
@Override p>
public int compareTo(NewK2 o) { final int menos = compTo(this.first,o.first ); >} return -compTo (this.segundo,o.segundo);
}
}
// Descubrí que no puedo obtener lo que quiero usando directamente el método compareTo de la clase String Result (primera columna ascendente, segunda columna descendente).
public int compTo(String one,String otro) { int len = one.length(); char[] v1 = one.toCharArray() char[] v2 = another.toCharArray(); ; int k = 0; mientras (k < len) { char c1 = v1[k]; char c2 = v2[k]; p>
k++;
} return 0;
}@Override
public int hashCode() { return this.first.hashCode( )+ this.@Override
público booleano es igual (Objeto obj) { if(! (obj instancia de NewK2)){ return false;
}
NewK2 oK2 = (NuevoK2)obj; return (this.first==oK2.first)&&(this.segundo==oK2.segundo);
}
} ?? P> 6 4656667686970717273747576777879808182838485868788899091929394 95969798991001011021031041051061071081091101111121131141151 161 1711811912012112212312412512612712812913013113213313413513613 713813914014114214314414514614714814915015115215315415515 61571 58159160161162
Resultados de ejecución:?