将Cassandra数据加载到Dask数据帧

将Cassandra数据加载到Dask数据帧,dask,Dask,我正在尝试将数据从cassandra数据库加载到Dask数据帧中。我已尝试查询以下内容,但未成功: query="""SELECT * FROM document_table""" df = man.session.execute(query) df = dd.DataFrame(list(df)) TypeError回溯(最近一次调用) 在() ---->1 a=dd.DataFrame(列表(df)) TypeError:\uuuuu init\uuuuuu()缺少3个必需的位置参数:

我正在尝试将数据从cassandra数据库加载到Dask数据帧中。我已尝试查询以下内容,但未成功:

query="""SELECT * FROM document_table"""
df = man.session.execute(query)
df = dd.DataFrame(list(df)) 

TypeError回溯(最近一次调用)
在()
---->1 a=dd.DataFrame(列表(df))
TypeError:\uuuuu init\uuuuuu()缺少3个必需的位置参数:“name”、“meta”和“divisions”

有人知道一种将数据直接从Cassandra加载到Dask的简单方法吗?首先加载到pandas中的内存太多。

您的代码存在一些问题:

  • df=
    可能会将整个数据集加载到内存中。这里不调用Dask,它与此无关。了解卡桑德拉司机的人可以证实这一点

  • list(df)
    生成数据帧的列名列表并删除所有数据

  • dd.DataFrame
    ,如果您阅读了,则该文件不是这样构造的

您可能想做的是a)生成一个返回数据分区的函数,b)延迟此函数并使用分区的各种值调用c)使用
dd.from_delayed
生成dask数据帧。例如,假设表中有一个字段
partfield
,该字段的值可能为1..6,每个分区的行数相似:

@dask.delayed
def part(x):
    session = # construct Cassandra session
    q = "SELECT * FROM document_table WHERE partfield={}".format(x)
    df = man.session.execute(query)
    return dd.DataFrame(list(df)) 

parts = [part(x) for x in range(1, 7)]
df = dd.from_delayed(parts)

谢谢这似乎是可行的,但当我运行df.head()时,我得到了:在_delayed的
中发现的元数据不匹配。预期的类型分区
DataFrame
但得到了
NoneType
我用元组列表[(col1,dtype1),(col2,dtype2)…]指定了元数据,我还尝试使用空数据框作为指定列名和dtype的元数据,但这导致了相同的错误
@dask.delayed
def part(x):
    session = # construct Cassandra session
    q = "SELECT * FROM document_table WHERE partfield={}".format(x)
    df = man.session.execute(query)
    return dd.DataFrame(list(df)) 

parts = [part(x) for x in range(1, 7)]
df = dd.from_delayed(parts)