¿Cuál es el interés de Twitter en álgebra abstracta (con álgebird)?

Permítanme ampliar la respuesta de Justin Rising. El álgebra abstracta se trata de extraer patrones comunes. ¿Qué tienen en común las cadenas y los enteros? Ambos se pueden agregar (1 + 1 = 2, “a” + “a” = “aa”) y ambos tienen un elemento cero (1 + 0 = 1, “a” + “” = “a”). En el lenguaje del álgebra abstracta hay un monoide para ambos.

Tenga en cuenta que para ser un monoide, la operación de suma también debe ser asociativa, por lo que (a + b) + c = a + (b + c) y cerrada. Muchos monoides también son conmutativos, por lo que a + b = b + a. Ver Monoid en Wikipedia. Esto será importante más adelante.

¿Por qué es útil esto? La abstracción es generalmente útil porque le permite escribir más código reutilizable. Si escribe código que usa solo un Monoide, puede sustituirlo en cualquier instancia de Monoid (por ejemplo, Int, String, Map o …) y simplemente funcionará.

Eso es bueno en sí mismo. Hay un concepto muy general (Monoid) que nos permite escribir más código reutilizable. ¡Pero hay más!

En primer lugar, las personas que realizan análisis de datos tratan muchas cosas que son monoides. Por ejemplo, si desea contar elementos distintos (“¿cuántos visitantes únicos recibió esta página web?”) Está tratando con Conjuntos. Los conjuntos son monoides y, por lo tanto, son contadores de elementos únicos aproximados como HyperLogLog (que es un algoritmo súper increíble y algo que aprende por sí mismo). Entonces, si está haciendo un análisis de datos, está utilizando estos conceptos todo el tiempo, lo que los hace aún más relevantes.

Finalmente, si está haciendo análisis de datos “a escala”, está ejecutando cálculos en muchas máquinas. ¿Cómo se combinan los resultados de estos cálculos? Bueno, si estás usando monoides conmutativos, ¡solo agrégalos! La propiedad de conmutatividad significa que no importa en qué orden realice esta adición. Por lo tanto, puede agregar los resultados de la máquina 1 + máquina 2 + máquina 3 o máquina 3 + máquina 1 + máquina 2 o … lo que sea, no importa. Siempre obtendrá la respuesta correcta. Esto significa que distribuir el trabajo a través de las máquinas es realmente fácil porque nunca tendrá que preocuparse por la fusión complicada posterior.

Entonces, resumen:

– El álgebra abstracta le permite escribir código reutilizable.
– El análisis de datos involucra muchos conceptos que pueden describirse usando álgebra abstracta.
– El uso de abstracciones de álgebra abstracta (específicamente operaciones conmutativas) le permite fusionar cálculos distribuidos sin preocuparse por el orden en que se fusionan.

Parece que algebird es una colección de algoritmos de agregación genéricos y los tipos de datos para admitirlos. Puedo ver dónde sería útil para cualquiera que haga informática distribuida en Scala.

Tenga en cuenta que algebird se desarrolló originalmente para admitir el escaldado, que es la biblioteca Scala de Twitter para Hadoop. Creo que es el mejor lugar para buscar detalles sobre cómo se usa.

Creo que la respuesta de Noel lo dice todo. Si desea obtener más información, puede leer este bonito documento del Pr Jimmy Lin sobre el uso de monoide en Map Reduce peration.
[1304.7544] ¡Monoidificar! Monoides como principio de diseño para algoritmos de MapReduce eficientes

Otra motivación es que muchos algoritmos de gráficos comunes, como el cierre transitivo, la ruta más corta de una sola fuente, los componentes conectados y muchos más, pueden formularse como la solución de un sistema lineal definido sobre un semirector idempotente.

Es posible formular un algoritmo único para resolverlos a todos en un nivel abstracto. El siguiente libro proporciona información más profunda sobre este tema:

M. Gondran y M. Minoux. Gráficos, dioides y semirings – Nuevo
Modelos y algoritmos. Springer, 2008.