Ideas convencionales para procesar datos masivos
Divide y conquistarás/mapeo hash + estadísticas Hash_map + ordenación montón/rápido/fusión
1. Datos de registro masivo, extracción cierta La IP con más visitas diarias a Baidu
1.) Divide y conquistarás/mapeo hash: convierte archivos grandes en (mapeo de módulo) archivos pequeños
2) Estadísticas de Hash_map: Cuando se convierten archivos grandes Si tiene archivos pequeños, entonces podemos usar hash_map(ip, value) convencional para realizar estadísticas de frecuencia con complejidad O(n)
3) Clasificación rápida/montón: obtenga la IP con la mayor cantidad de veces para cada archivo, luego resuma estos archivos y ordénelos para obtener la cantidad máxima de IP
Primero, saque las IP en los registros de este día, acceda a Baidu y escríbalas una por una. en un archivo grande. Tenga en cuenta que la IP es de 32 bits y hay como máximo 2 ^ 32 IP. También puede usar el método de mapeo hash, como %1000, para mapear todo el archivo grande en 1000 archivos pequeños y luego encontrar la IP con la frecuencia más alta en cada archivo pequeño (puede usar hash_map para mapear todas las IP en esos 1000 archivos ) Estadísticas de frecuencia, y luego averigüe la IP con la frecuencia más alta en cada archivo) y la frecuencia correspondiente. Luego entre las 1000 IP más grandes, busca la IP con mayor frecuencia, que es la que deseas.
2. Encuentre consultas populares, cuente las 10 consultas más populares entre 3 millones de cadenas de consulta
1. Mapeo hash: lea secuencialmente el archivo, para cada palabra x, tome hash(x )%5000, y luego guarde este valor en 5000 archivos pequeños (registrados como x0, x1,...x4999)
De esta manera, cada archivo tiene aproximadamente 200k. Si algunos de los archivos exceden 1 M de tamaño, puede continuar dividiéndolos de manera similar hasta que el tamaño de los archivos pequeños descompuestos no exceda 1 M
2. Estadísticas de hash_map: para cada archivo de archivo pequeño, use trie tree/hash_map, etc. para contar las palabras que aparecen en cada archivo y la frecuencia correspondiente
3. Ordenación por montón/fusión: saque las 100 palabras con la frecuencia más alta (puede usar 100 nodos) Después del montón mínimo), se almacenan en el archivo 100 palabras y sus correspondientes frecuencias, obteniendo así otros 5.000 archivos. El último paso es fusionar estos 5000 archivos (similar a la clasificación por combinación)
5. Hay 10 archivos, cada archivo es 1G y cada línea de cada archivo almacena la consulta del usuario, la consulta para cada uno. El archivo puede repetirse. Debe ordenar según la frecuencia de la consulta
Mapeo de hash/módulo->estadísticas de hashMap->Clasificación de montón de archivos únicos->Fusión de archivos múltiples
6. Dados dos a y b, cada uno de los cuales almacena 5 mil millones de URL, cada URL ocupa 64 bytes y el límite de memoria es 4G. ¿Le permite encontrar la mayor cantidad de URL diferentes para los archivos a y b?
1. Divide y conquistarás/mapeo hash: recorre el archivo a, obtiene cada URL y luego almacena las URL en 1000 archivos pequeños según los valores obtenidos. Cada archivo pequeño tiene aproximadamente 300M. Recorra el archivo b y almacene las URL en 1000 archivos pequeños de la misma manera que a (marcados como). Después de este procesamiento, todas las URL posibles iguales están en los archivos pequeños correspondientes (
O(N) + N' * O(logK), (N es 10,000, N' es el elemento clave del hashmap Count 10,000, K=10)
Utilice un montón mínimo con 100 elementos. La complejidad es O(100w*lg100)
1,3, 250 millones de enteros. Números enteros. El espacio de memoria no es suficiente para acomodar estos 250 millones de números enteros.
/writer#/notebooks/45731388/notes/70253940/preview
Para esta pregunta, lea estos 500 millones de números secuencialmente para el número de lectura, si es el bit más alto del. El número binario correspondiente es 1, luego escriba este número en f1; de lo contrario, escríbalo en f0. Mediante este paso, estos 500 millones de números se pueden dividir en dos partes, y los números en f1 son mayores que los números en f0.
Después de particionar, es muy fácil saber si la mediana está en f0 o f1. Supongamos que hay 100 millones de números en f0, entonces la mediana debe estar en f1, y es el promedio del número 150 millonésimo en f1, ordenado de pequeño a grande, y el siguiente número.
Para f1, puede usar el segundo binario más alto para continuar dividiendo el archivo en dos y continuar dividiéndolo de esta manera hasta que el archivo dividido se pueda cargar en la memoria. Después de cargar los datos en la memoria. , puede ordenarlo o usarlo directamente. La clasificación rápida o la clasificación en montón (pequeño montón superior) encuentra el K-ésimo número más grande para encontrar la mediana.
/s/rdz4pfTCeX1ahOM4KAi3oQ
/s/VXGtJ9Miwfc1yD3v44kvnw