Lesen von großen Dateien mit DBFS-Einbindung über Python-APIsReading large DBFS-mounted files using Python APIs

In diesem Artikel wird erläutert, wie Sie einen Fehler beheben, der auftritt, wenn Sie große, mit dBFS eingebundene Dateien mithilfe von lokalen Python-APIs lesen.This article explains how to resolve an error that occurs when you read large DBFS-mounted files using local Python APIs.

ProblemProblem

Wenn Sie dbfs:// in einer Python-API wie Pandaseinen Ordner in eine Datei einbinden und eine Datei mit einer Größe von mehr als 2 GB lesen, wird folgender Fehler angezeigt:If you mount a folder onto dbfs:// and read a file larger than 2GB in a Python API like pandas, you will see following 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

UrsacheCause

Der Fehler tritt auf, weil ein Argument in der python-Methode zum Lesen einer Datei ein Vorzeichen mit Vorzeichen ist, die Länge der Datei ein int-Wert ist und das Objekt eine Datei größer als 2 GB ist, kann die Länge größer als die maximale Ganzzahl mit Vorzeichen sein.The error occurs because one argument in the Python method to read a file is a signed int, the length of the file is an int, and if the object is a file larger than 2GB, the length can be larger than maximum signed int.

LösungSolution

Verschieben Sie die Datei aus dbfs:// in das lokale Dateisystem (file://) .Move the file from dbfs:// to local file system (file://). Lesen Sie anschließend den Artikel Verwenden der Python-API.Then read using the Python API. Beispiel:For example:

  1. Kopieren Sie die Datei von dbfs:// nach file:// :Copy the file from dbfs:// to file://:

    %fs cp dbfs:/mnt/large_file.csv file:/tmp/large_file.csv
    
  2. Lesen Sie die Datei in der Pandas -API:Read the file in the pandas API:

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