2017-09-04 1 views
4

Cassandraには、Pythonドライバでクエリを実行したときにOrderedMapSerializedKey構造体を返すリストのマップがあります。この構造はリストのマップです。全体の質問をパンダに入れたいと思います。Cassandra OrderedMapSerializedKeyをPython辞書に変換する

キーを取得して新しい列のラベルとして使用し、リストの最初の要素のみを値として使用することを意味するOrderedMapSerializedKey構造体からデータを抽出するには、hereの複合/ビルドされたDataFrameを返す前に、工場で汚れた操作を行っていました。

同様の問題が実際には回答なしでhereと尋ねられました。

このようなOrderedMapSerializedKey構造を、パンダのDataFrameにすぐに読み込むことのできるPython辞書に変換するには、より良い方法がありますか?

答えて

2

OrderedMapSerializedKeyカッサンドラ構造をデータフレーム列にdictとして保存すると、この値/列を任意の人に転送できます。 Cassandraの行の実際のキーを知ることができない可能性があります(異なるキーが行に挿入される可能性があるため)。

私がテストしたソリューションは、あなただけのpandas_factory funcitonを改善する必要があるので、ここで:


編集:私の唯一の最初(0番目)の行を置き換え以前のソリューションで

Cassandraのデータセット(rowsはすべてのタプルがカサンドラの行であるタプルのリストである)

from cassandra.util import OrderedMapSerializedKey 

def pandas_factory(colnames, rows): 

    # Convert tuple items of 'rows' into list (elements of tuples cannot be replaced) 
    rows = [list(i) for i in rows] 

    # Convert only 'OrderedMapSerializedKey' type list elements into dict 
    for idx_row, i_row in enumerate(rows): 

     for idx_value, i_value in enumerate(i_row): 

      if type(i_value) is OrderedMapSerializedKey: 

       rows[idx_row][idx_value] = dict(rows[idx_row][idx_value]) 

    return pd.DataFrame(rows, columns=colnames) 

Cassandraマップフィールドの前後に最低1つの値があるかどうかを自動的にチェックするか、それに応じて手動で上記のスクリプトを手動で変更する必要があります。

素敵な日!

+0

これは私のやり方と同じです。 –

関連する問題