我需要读取大量数据(APP.8亿条记录),我的代码可以很好地处理一百万条记录。对于较大的集合,构建元数据需要时间。有没有人能建议一下如何让它更快。下面是我在应用程序中使用的代码片段。
def get_partitions(num_partitions):
list_range =[]
initial_start=0
for i in range(num_partitions):
amp_range = 3240//num_partitions
start = (i*amp_range+1)*initial_start
end = (i+1)*amp_range
list_range.append((start,end))
initial_start = 1
return list_range
@delayed
def load(query,start,end,connString):
df = pd.read_sql(query.format(start, end),connString)
engine.dispose()
return df
connString = "teradatasql://{user}:{password}@{hostname}/?logmech={logmech}&encryptdata=true"
results = from_delayed([load(query,start, end,connString) for start,end in get_partitions(num_partitions)])发布于 2020-12-21 01:39:37
构建时间可能用于查找表的元数据。这是通过获取第一个分区的整个并对其进行分析来完成的。
最好是显式地指定它,如果您预先知道数据类型,例如,所有列的{col: dtype, ...},或者从一个单独的查询生成它,您将其限制为尽可能多的行,以确保您具有正确的类型:
meta = dask.compute(load(query, 0,10 ,connString))
results = from_delayed(
[
load(query,start, end,connString) for start,end in
get_partitions(num_partitions)
],
mete=meta.loc[:0, :] # zero-length version of table
)https://stackoverflow.com/questions/65369418
复制相似问题