使用Chunksize和Dask处理缺失号的Pandas中的8GB红移表

2024-05-23 10:16:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经用我的Jupyter笔记本成功地将Python连接到红移表。 我对1天的数据(176707行)进行了采样,并使用Missingno执行了一个函数,以评估有多少数据丢失以及丢失的位置。没问题

以下是迄今为止的代码(为安全而修订)

#IMPORT NECESSARY PACKAGES FOR REDSHIFT CONNECTION AND DATA VIZ
import psycopg2
from getpass import getpass
from pandas import read_sql
import seaborn as sns
import missingno as msno

#PASSWORD INPUT PROMPT
pwd = getpass('password')

#REDSHIFT CREDENTIALS 
config = { 'dbname': 'abcxyz', 
           'user':'abcxyz',
           'pwd':pwd,
           'host':'abcxyz.redshift.amazonaws.com',
           'port':'xxxx'
         }

#CONNECTION UDF USING REDSHIFT CREDS AS DEFINED ABOVE
def create_conn(*args,**kwargs):
    config = kwargs['config']
    try:
        con=psycopg2.connect(dbname=config['dbname'], host=config['host'], 
                              port=config['port'], user=config['user'], 
                              password=config['pwd'])
        return con
    except Exception as err:
        print(err)

#DEFINE CONNECTION 
con = create_conn(config=config)

#SQL TO RETRIEVE DATASET AND STORE IN DATAFRAME 
df = read_sql("select * from schema.table where date = '2020-06-07'", con=con)

# MISSINGNO VIZ
msno.bar(df, labels=True, figsize=(50, 20))

这将产生以下内容,这正是我想要看到的:

enter image description here

但是,我需要在整个表的一个子集上执行此任务,而不仅仅是一天

我跑了

SELECT "table", size, tbl_rows FROM SVV_TABLE_INFO  

…我可以看到,该表的总大小为9GB和32.5M行,尽管我需要评估11M行的数据完成情况的样本是11M行

到目前为止,我已经确定了两个选项,用于检索比我最初尝试的~18k行更大的数据集

这些是:

1)使用chunksize 2) 使用Dask

使用Chunksize

我用以下代码替换了必要的代码行:

#SQL TO RETRIEVE DATASET AND STORE IN DATAFRAME 
df = read_sql("select * from derived.page_views where column_name = 'something'", con=con, chunksize=100000)

在MacBook Pro 2.2 GHz Intel Core i7和16 GB RAM上运行这项任务仍然需要几个小时,并在任务结束时发出内存警告。 当它完成时,我无论如何都无法查看块,内核断开了连接,这意味着内存中的数据丢失了,我基本上浪费了一个上午

我的问题是:

假设这不是一个完全愚蠢的努力,Dask会是一个更好的方法吗?如果是这样,我如何使用Dask执行此任务

Dask文档给出了以下示例:

df = dd.read_sql_table('accounts', 'sqlite:///path/to/bank.db',
                  npartitions=10, index_col='id')  # doctest: +SKIP

但我不明白如何将其应用到我的场景中,即连接到红移表以检索数据

感谢您的帮助


Tags: and数据代码fromimportconfigredshiftdf

热门问题