我已经用我的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))
这将产生以下内容,这正是我想要看到的:
但是,我需要在整个表的一个子集上执行此任务,而不仅仅是一天
我跑了
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
但我不明白如何将其应用到我的场景中,即连接到红移表以检索数据
感谢您的帮助
目前没有回答
相关问题 更多 >
编程相关推荐