Läsa stora DBFS-monterade filer med python-API: er

Den här artikeln förklarar hur du löser ett fel som uppstår när du läser stora DBFS-monterade filer med hjälp av lokala python-API: er.

Problem

Om du monterar en mapp på dbfs:// och läser en fil som är större än 2 GB i ett python-API som Pandas, visas följande fel meddelande:

/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

Orsak

Felet beror på att ett argument i python-metoden för att läsa en fil är en signerad int. filens längd är en int, och om objektet är en fil som är större än 2 GB kan längden vara större än det största tillåtna antalet heltal.

Lösning

Flytta filen från dbfs:// till det lokala fil systemet (file://) . Läs sedan med python-API: et. Exempel:

  1. Kopiera filen från dbfs:// till file:// :

    %fs cp dbfs:/mnt/large_file.csv file:/tmp/large_file.csv
    
  2. Läs filen i Pandas -API: et:

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