首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Dask cluster/Teradatasql和sqlalchemy从Teradata读取大数据量数据

使用Dask cluster/Teradatasql和sqlalchemy从Teradata读取大数据量数据
EN

Stack Overflow用户
提问于 2020-12-19 19:38:03
回答 1查看 82关注 0票数 0

我需要读取大量数据(APP.8亿条记录),我的代码可以很好地处理一百万条记录。对于较大的集合,构建元数据需要时间。有没有人能建议一下如何让它更快。下面是我在应用程序中使用的代码片段。

代码语言:javascript
复制
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)])
EN

回答 1

Stack Overflow用户

发布于 2020-12-21 01:39:37

构建时间可能用于查找表的元数据。这是通过获取第一个分区的整个并对其进行分析来完成的。

最好是显式地指定它,如果您预先知道数据类型,例如,所有列的{col: dtype, ...},或者从一个单独的查询生成它,您将其限制为尽可能多的行,以确保您具有正确的类型:

代码语言:javascript
复制
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
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65369418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档