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.
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:
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.Usar
dbutils.fs.cp
en lugar deos.system
: En lugar de usaros.system
para ejecutar el comandounzip
, intente usardbutils.fs.cp
para copiar los archivos de vuelta adata_path
. Por ejemplo:Esto copiará el archivo descomprimido de vuelta a
data_path
utilizando las utilidades del sistema de archivos de Databricks.Verificar los permisos: Asegúrese de que los nodos de trabajo tengan permisos para acceder al directorio
tmp
y escribir endata_path
. Si los nodos de trabajo no tienen los permisos necesarios, es posible que el proceso de descompresión falle.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.