GOOGLE ADS

jueves, 21 de abril de 2022

chispa guardar cadena simple en archivo de texto

Tengo un trabajo de chispa que necesita almacenar la última vez que se ejecutó en un archivo de texto. Esto tiene que funcionar tanto en HDFS como en local fs (para pruebas).

Sin embargo, parece que esto no es tan sencillo como parece.

He estado intentando eliminar el directorio y obtener mensajes de error "no se puede eliminar". Intentar almacenar un valor de picadura simple en un marco de datos para entarimar y viceversa.

todo esto es tan complicado que me hizo dar un paso atrás.

¿Cuál es la mejor manera de almacenar una cadena (marca de tiempo de la última ejecución en mi caso) en un archivo sobrescribiéndola?

EDITAR:

La forma desagradable en que lo uso ahora es la siguiente:

sqlc.read.parquet(lastExecution).map(t => "" + t(0)).collect()(0)

y

sc.parallelize(List(lastExecution)).repartition(1).toDF().write.mode(SaveMode.Overwrite).save(tsDir)


Solución del problema

Esto suena como almacenar metadatos simples de aplicación/ejecución. Como tal, no debería ser necesario que "Spark" guarde un archivo de texto (es decir, no debería hacerlo en trabajos de chispa distribuidos, por parte de los trabajadores).

El lugar ideal para colocarlo es en el código de su controlador, generalmente después de construir sus RDD. Dicho esto, no usaría la API de Spark para hacer esto, preferiría hacer algo tan trivial como usar un escritor o un flujo de salida de archivos. El único inconveniente aquí es cómo lo leerá de nuevo. Suponiendo que su programa de controlador se ejecuta en la misma computadora, no debería haber ningún problema.

Si los trabajadores deben leer este valor en trabajos futuros (que posiblemente sea la razón por la que lo desea en hdfs), y no desea utilizar la API de Hadoop directamente, deberá asegurarse de tener solo una partición para que que no termine con varios archivos con el valor trivial. Sin embargo, esto no se puede decir del almacenamiento local (se almacena en la máquina donde se ejecuta el trabajador que ejecuta la tarea), administrar esto simplemente sería exagerar.

Mi mejor opción sería usar el programa del controlador y crear el archivo en la máquina que ejecuta el controlador (suponiendo que sea el mismo que se usará la próxima vez) o, mejor aún, ponerlo en una base de datos. Si se necesita este valor en los trabajos, el controlador simplemente puede pasarlo.

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...