rag*_*esz 17 python cassandra pandas
什么是正确的和最快的方式来读取数据卡珊德拉到熊猫吗?现在我使用以下代码,但它很慢......
import pandas as pd
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
from cassandra.query import dict_factory
auth_provider = PlainTextAuthProvider(username=CASSANDRA_USER, password=CASSANDRA_PASS)
cluster = Cluster(contact_points=[CASSANDRA_HOST], port=CASSANDRA_PORT,
auth_provider=auth_provider)
session = cluster.connect(CASSANDRA_DB)
session.row_factory = dict_factory
sql_query = "SELECT * FROM {}.{};".format(CASSANDRA_DB, CASSANDRA_TABLE)
df = pd.DataFrame()
for row in session.execute(sql_query):
df = df.append(pd.DataFrame(row, index=[0]))
df = df.reset_index(drop=True).fillna(pd.np.nan)
Run Code Online (Sandbox Code Playgroud)
读取1000行需要1分钟,我有一点"更多"...如果我运行相同的查询,例如.在DBeaver中,我在一分钟内得到了整个结果(~40k行).
谢谢!!!
rag*_*esz 34
我在官方邮件列表中得到了答案(它完美地运行):
嗨,
尝试定义自己的pandas row factory:
Run Code Online (Sandbox Code Playgroud)def pandas_factory(colnames, rows): return pd.DataFrame(rows, columns=colnames) session.row_factory = pandas_factory session.default_fetch_size = None query = "SELECT ..." rslt = session.execute(query, timeout=None) df = rslt._current_rows这就是我这样做的方式 - 它应该更快......
如果你找到一个更快的方法 - 我很感兴趣:)
迈克尔
Geo*_*e C 10
我所做的(在python 3中)是:
query = "SELECT ..."
df = pd.DataFrame(list(session.execute(query)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7705 次 |
| 最近记录: |