2017-09-23 18 views
2

のデータフレームを生成:グループへのURLおよびタイムスタンプ、集計列の値のデータを私が欲しいはDASKのデータフレームを集約し、私はこのようになりますDASKのデータフレーム持って集合体

url  referrer session_id ts     customer 
url1 ref1  xxx  2017-09-15 00:00:00 a.com 
url2 ref2  yyy  2017-09-15 00:00:00 a.com 
url2 ref3  yyy  2017-09-15 00:00:00 a.com 
url1 ref1  xxx  2017-09-15 01:00:00 a.com 
url2 ref2  yyy  2017-09-15 01:00:00 a.com 

をし、希望のデータフレームを生成しますこの代わりに、次のようになります。次のように

スパークSQLで
customer url ts     page_views visitors referrers 
a.com url1 2017-09-15 00:00:00 1   1  [ref1] 
a.com url2 2017-09-15 00:00:00 2   2  [ref2, ref3] 

、私はこれを行うことができます。

select 
    customer, 
    url, 
    ts, 
    count(*) as page_views, 
    count(distinct(session_id)) as visitors, 
    collect_list(referrer) as referrers 
from df 
group by customer, url, ts 

Daskデータフレームでそれを行う方法はありますか?私がしようとしたが、次のように私は、別に集計列を計算することができます。

# group on timestamp (rounded) and url 
grouped = df.groupby(['ts', 'url']) 

# calculate page views (count rows in each group) 
page_views = grouped.size() 

# collect a list of referrer strings per group 
referrers = grouped['referrer'].apply(list, meta=('referrers', 'f8')) 

# count unique visitors (session ids) 
visitors = grouped['session_id'].count() 

しかし、私は、私は必要な組み合わせデータフレームを生成するための良い方法を見つけるように見えることはできません。

gb = df.groupby(['customer', 'url', 'ts']) 
gb.apply(lambda d: pd.DataFrame({'views': len(d), 
    'visitiors': d.session_id.count(), 
    'referrers': [d.referer.tolist()]})).reset_index() 

(と仮定すると、訪問者が上記のSQLごとのように一意である必要があります) あなたは、出力のmetaを定義したいことがあります。

+0

パンダでこれを行うには良い方法がありますか?その方法はdask.dataframeで動作しますか? – MRocklin

答えて

1

次は、実際に作業を行います。

+0

ニース!私のデータから 'pd.DataFrame'を構築すると、すべてのデータを1台のマシンのメモリに格納しますか?今はおもちゃの例ですが、実際の仕事はギガバイトの分散データで動作します。 –

+0

あなたのデータとまったく同じように動作するように見えました。 http://dask.pydata.org/en/latest/dataframe-api.html#dask.dataframe.groupby.DataFrameGroupBy.apply – mdurant

+0

メタパラメータを指定してみることをお勧めします。データが正しく指定されていますこの例では、 分割された寄木細工から読み取られたデータのほんの一例では機能しませんでした。私は正確に何が間違っているのか把握したいと思います - データサンプルでdaskに問題を提出します。 Stackoverflowはそれのための良い場所のように見えません。ありがとうございました! –

関連する問題