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:
Kopiera filen från
dbfs://
tillfile://
:%fs cp dbfs:/mnt/large_file.csv file:/tmp/large_file.csv
Läs filen i Pandas -API: et:
import pandas as pd pd.read_csv('file:/tmp/large_file.csv',).head()