吐槽
最近有工作需要分析Reddit的數(shù)據(jù)丰滑。Reddit的數(shù)據(jù)好處是格式整齊掀淘,但是由于每條很小砚亭,導(dǎo)致數(shù)據(jù)的記錄條目還是蠻大的。舉個(gè)例子扣猫,我用Solr 6.0建2012到2013年的post的索引菜循,半年的索引建了六七個(gè)小時(shí),一年的因?yàn)槌瑫r(shí)沒有建立起來申尤。而且癌幕,我還只是針對幾個(gè)特定的域建立索引。
目的
原本計(jì)劃通過Solr把查詢相關(guān)的文檔都給找出來昧穿,建立一個(gè)相關(guān)文檔創(chuàng)建時(shí)間的time-series data勺远。結(jié)果一年的索引我服務(wù)器上都沒搭起來,從07年到15年的ts data就更沒辦法通過這個(gè)方式搞定了时鸵。
東找西找發(fā)現(xiàn)Reddit的數(shù)據(jù)早就被人上傳到了Google BigQuery上建立了表格胶逢,可以支持類SQL語句的查詢,于是饰潜,只好通過這個(gè)辦法聚合需要的數(shù)據(jù)的time-series data了初坠。
Hands-on
- 首先是注冊BigQuery,建立項(xiàng)目彭雾,給項(xiàng)目開啟BigQuery的API碟刺。(這一步有官方文檔)
- 然后對于響應(yīng)的項(xiàng)目,生成憑證(credentials)薯酝,并將憑證在.bash_profile文件中設(shè)置為默認(rèn)半沽。
GOOGLE_APPLICATION_CREDENTIALS=/$Path/key.json
export GOOGLE_APPLICATION_CREDENTIALS
- 在python代碼中就可以調(diào)用了
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from oauth2client.client import GoogleCredentials
import pandas as pd
# 從環(huán)境變量中獲取默認(rèn)credentials
credentials = GoogleCredentials.get_application_default()
# 構(gòu)建與BigQuery API交互的服務(wù)對象
bigquery_service = build('bigquery', 'v2', credentials=credentials)
# ~~~構(gòu)建query~~~
# 用pandas提供的結(jié)構(gòu)直接將查詢結(jié)果讀入data frame中,并存入.csv文件
df = pd.io.gbq.read_gbq(query_data_string, project_id=project_id)
output_file_name = query_id + ".csv"
df.to_csv(output_file_name, sep='\t', encoding='utf-8')
print "Finished: " + output_file_name
其中吴菠,query_data_string是一個(gè)類SQL語句者填,關(guān)于Query的語句的支持可以參考query reference.