Хотите обработать большой файл (8 ГБ) с помощью Panads, используя Dask.
Код следующим образом, отредактирован для безопасности.
import dask.dataframe as dd
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy import Column, MetaData, Table
from sqlalchemy.sql import select
from getpass import getpass
import psycopg2
import missingno as msno
import dask.dataframe as dd
#PASSWORD INPUT PROMPT
pwd = getpass('password')
username = 'abcdefg'
password = pwd
server = 'abcdefg.redshift.amazonaws.com'
database = 'abcdefg'
connection_string = f'postgresql+psycopg2://{username}:{password}@{server}/{database}'
engine = create_engine(connection_string)
metadata = MetaData()
t = Table('table_name', metadata,
schema='schema_name')
select([t]).limit(5).alias('mydata')
dd.read_sql_table(t, connection_string, index_col='id', npartitions=50, columns=None)
Когда я явно указываю данный столбец индекса таблицу, я получаю следующую ошибку:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-26-181aa1bed41e> in <module>
----> 1 dd.read_sql_table(t, connection_string, index_col='index_col_name', npartitions=50, columns=None)
//anaconda3/lib/python3.7/site-packages/dask/dataframe/io/sql.py in read_sql_table(table, uri, index_col, divisions, npartitions, limits, columns, bytes_per_chunk, head_rows, schema, meta, engine_kwargs, **kwargs)
104
105 index = (
--> 106 table.columns[index_col] if isinstance(index_col, string_types) else index_col
107 )
108 if not isinstance(index_col, string_types + (elements.Label,)):
//anaconda3/lib/python3.7/site-packages/sqlalchemy/util/_collections.py in __getitem__(self, key)
192
193 def __getitem__(self, key):
--> 194 return self._data[key]
195
196 def __delitem__(self, key):
KeyError: 'index_col_name'
Я понимаю, что такое ошибка ключа и почему она может произойти в сценарии, когда я вызываю значение, которое ранее не было определено или не существуют, но я не понимаю, почему это происходит здесь и почему я не могу решить эту проблему.
Кто-нибудь может дать совет?