Что является правильным и самым быстрым способом читать данные Кассандры в панды? Теперь я использую следующий код, но это очень медленно ...Python читает данные Кассандры в пандах
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)
Reading 1000 строк занимает 1 минуту, и у меня есть «немного больше» ... Если я запускаю тот же запрос, например. в DBeaver, я получаю все результаты (~ 40k строк) в течение минуты.
спасибо !!!
Если выход 'session.execute (sql_query)' список dicts, я хотел бы попробовать просто 'df = pd.DataFrame (session.execute (sql_query))' или запустить 'pd.DataFrame' в некоторой части этого списка. Добавление строк в кадр данных один за другим неэффективно. – ptrj
Результат 'session.execute (sql_query)' является специальным ' итерируемом объекте. Его строками могут быть кортежи, named_tuples или словари. –
ragesz
Я вижу. Тем не менее, лучше сначала преобразовать его в список, например 'lst = []; для строки в сеансе ...: lst.append (строка) ', если ничего не работает. И затем соедините результаты: 'df = pd.concat (lst)'. Таким образом, вы могли бы избежать дорогостоящих вызовов 40k на 'pd.DataFrame.append'. – ptrj