【发布时间】:2025-12-03 14:55:01
【问题描述】:
我想将包含 10+ gb 数据的表中的所有数据读取到数据框中。当我尝试使用read_sql 阅读时,出现内存过载错误。我想对该数据进行一些处理并用新数据更新表。我怎样才能有效地做到这一点。我的电脑有 26gb 的内存,但数据最大为 11gb,但我仍然遇到内存过载错误。
在 Dask 中花费了很多时间。下面是代码。
import dateparser
import dask.dataframe as dd
import numpy as np
df = dd.read_sql_table('fbo_xml_json_raw_data', index_col='id', uri='postgresql://postgres:passwordk@address:5432/database')
def make_year(data):
if data and data.isdigit() and int(data) >= 0:
data = '20' + data
elif data and data.isdigit() and int(data) < 0:
data = '19' + data
return data
def response_date(data):
if data and data.isdigit() and int(data[-2:]) >= 0:
data = data[:-2] + '20' + data[-2:]
elif data and data.isdigit() and int(data[-2:]) < 0:
data = data[:-2] + '19' + data[-2:]
if data and dateparser.parse(data):
return dateparser.parse(data).date().strftime('%Y-%m-%d')
def parse_date(data):
if data and dateparser.parse(data):
return dateparser.parse(data).date().strftime('%Y-%m-%d')
df.ARCHDATE = df.ARCHDATE.apply(parse_date)
df.YEAR = df.YEAR.apply(make_year)
df.DATE = df.DATE + df.YEAR
df.DATE = df.DATE.apply(parse_date)
df.RESPDATE = df.RESPDATE.apply(response_date)
【问题讨论】:
-
在处理之前,像
len(df)这样的简单操作是否有效?请注意,您要求 Dask 根据前 5 行的字节大小在此处猜测分区大小 - 您可能希望更具体地了解其他 kwargs。
标签: python pandas performance bigdata dask