import random

"""
Explanation: Multiplicación de matrices
Librerías utilizadas:

random
End of explanation
"""


def inicializarMatrizNueva(filas,columnas,valorMaximoNumero):
    matriz = []
    for i in range(filas):
        fil = []
        for j in range(columnas):
            a = random.randrange(valorMaximoNumero)
            fil.append(a)
        matriz.append(fil)
    
    matriz = sc.parallelize(matriz)
    return matriz

"""
Explanation: Matriz de prueba
Crear una nueva matriz de prueba de dimensiones filas x columnas.
Cada elemento será calculado aleatoriamente entre 0 y valorMaximoNumero.
End of explanation
"""


matriz = inicializarMatrizNueva(10000,20,1000)
print(matriz.take(2))

matriz2 = inicializarMatrizNueva(20,10000,1000)
print(matriz.take(2))

"""
Explanation: Ejecutar y tomar las dos primeras filas para verificar si sí funciona el algoritmo
End of explanation
"""


matriz.saveAsTextFile("matriz_n8")
matriz2.saveAsTextFile("matriz_n9")

"""
Explanation: Se guarda el archivo en $HOMEHDFS/matriz5
End of explanation
"""


matriz2=sc.textFile("matriz8")

"""
Explanation: Implementación multiplicación de matrices
Lectura de la matriz
End of explanation
"""


def quitar(x):
    y = x.split()
    return map(lambda w: int(w.replace(",","").replace("[","").replace("]","")),y)

matriz2 = matriz2.map(quitar)

print(matriz2.take(2))

"""
Explanation: Función para separar y limpiar los números del archivo. Recibe cada línea y la separa por espacios, luego limpia ,, [ y ]
End of explanation
"""


