es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Databricks pyspark parallelize consiste en descomprimir múltiples archivos.

Estoy tratando de paralelizar la descompresión de archivos almacenados en s3 en pyspark en Databricks. La descompresión en un bucle for se realiza de la siguiente manera:

file_list = [(file.path, file.name) for file in dbutils.fs.ls(data_path) if os.path.basename(file.path).endswith(".zip")] # data_path se toma como parámetro
file_names = [ff[1] for ff in file_list]
for ff in file_list:
  dbutils.fs.cp(ff[0], "/FileStore/tmp/" + ff[1])
  cmd = 'unzip /dbfs/FileStore/tmp/' + ff[1]
  os.system(cmd)
  dbutils.fs.cp("file:/databricks/driver/" + ff[1], data_path)
  dbutils.fs.rm("file:/databricks/driver/" + ff[1])

Estoy intentando paralelizar la parte de descompresión. Por lo tanto, después de copiar los archivos a "/FileStore/tmp/", ejecuto:


unzips = [file[1] for file in file_list]
def f(x):
os.system('unzip /dbfs/FileStore/tmp/' + x)
sc.parallelize(unzips).foreach(f)

El trabajo se ejecuta pero los archivos no se descomprimen en ningún lugar.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas potenciales con el código proporcionado que pueden estar causando que los archivos no se descompriman. Aquí hay algunas posibles soluciones:

    1. Verificar la ruta: Asegúrese de que la ruta de los archivos descomprimidos sea correcta. En el código original, los archivos descomprimidos se copian en data_path, pero en el nuevo código no lo hacen. Verifique que los archivos descomprimidos se estén guardando en la ubicación correcta.
    2. Usar dbutils.fs.cp en lugar de os.system: En lugar de usar os.system para ejecutar el comando unzip, intente usar dbutils.fs.cp para copiar los archivos de vuelta a data_path. Por ejemplo:

      def f(x):
         dbutils.fs.cp('/dbfs/FileStore/tmp/' + x, data_path)
      

      Esto copiará el archivo descomprimido de vuelta a data_path utilizando las utilidades del sistema de archivos de Databricks.

    3. Verificar los permisos: Asegúrese de que los nodos de trabajo tengan permisos para acceder al directorio tmp y escribir en data_path. Si los nodos de trabajo no tienen los permisos necesarios, es posible que el proceso de descompresión falle.

    4. Verificar los errores: Intente agregar algunas verificaciones de errores al comando unzip para ver si se encuentra con algún problema. Por ejemplo, podría agregar la bandera -v para imprimir una salida detallada, o redirigir la salida a un archivo de registro con fines de depuración.

    En general, hay varias cosas diferentes que verificar al paralelizar el proceso de descompresión en PySpark en Databricks. Al verificar la ruta, utilizar las utilidades del sistema de archivos de Databricks, verificar los permisos y agregar el manejo de errores, debería poder identificar y resolver cualquier problema que esté impidiendo que los archivos se descompriman.

Comments are closed.