Lectura de archivos de gran tamaño montados por DBFS con las API de Python

En este artículo se explica cómo resolver un error que se produce al leer archivos grandes montados en DBFS mediante las API de Python locales.

Problema

Si monta una carpeta en dbfs:// y lee un archivo de más de 2 GB en una API de Python como pandas, verá el siguiente error:

/databricks/python/local/lib/python2.7/site-packages/pandas/parser.so in pandas.parser.TextReader.__cinit__ (pandas/parser.c:3427)()
/databricks/python/local/lib/python2.7/site-packages/pandas/parser.so in pandas.parser.TextReader._setup_parser_source (pandas/parser.c:6883)()
IOError: Initializing from file failed

Causa

El error se produce porque un argumento del método de Python para leer un archivo es un entero con signo, la longitud del archivo es un valor int y, si el objeto es un archivo de más de 2 GB, la longitud puede ser mayor que el int con signo máximo.

Solución

Mueva el archivo del dbfs:// sistema de archivos local (file://) . A continuación, lea uso de la API de Python. Por ejemplo:

  1. Copie el archivo de dbfs:// a file:// :

    %fs cp dbfs:/mnt/large_file.csv file:/tmp/large_file.csv
    
  2. Lea el archivo en la API de pandas :

    import pandas as pd
    pd.read_csv('file:/tmp/large_file.csv',).head()