【发布时间】:2014-08-02 23:04:12
【问题描述】:
我正在尝试分析大量 GitHub 存档数据,但受到许多限制的困扰。
所以我的分析也需要我搜索一个 350GB 的数据集。我有数据的本地副本,也有通过 Google BigQuery 获得的副本。本地数据集分为 25000 个单独的文件。数据集是事件的时间线。
我想绘制每个存储库自创建以来的星数。 (仅适用于当前 > 1000 的 repos)
我可以使用 Google BigQuery 非常快速地获得此结果,但它每次“分析”13.6GB 的数据。这将我限制为
我的另一个选择是搜索我的本地副本,但是在每个文件中搜索特定字符串(存储库名称)的时间太长了。在我终止进程之前,我在 SSD 驱动器上花了一个多小时来处理一半的文件。
有什么更好的方法可以分析如此大量的数据?
用于搜索所有本地文件的 Python 代码:
for yy in range(11,15):
for mm in range(1,13):
for dd in range(1,32):
for hh in range(0,24):
counter = counter + 1
if counter < startAt:
continue
if counter > stopAt:
continue
#print counter
strHH = str(hh)
strDD = str(dd)
strMM = str(mm)
strYY = str(yy)
if len(strDD) == 1:
strDD = "0" + strDD
if len(strMM) == 1:
strMM = "0" + strMM
#print strYY + "-" + strMM + "-" + strDD + "-" + strHH
try:
f = json.load (open ("/Volumes/WD_1TB/GitHub Archive/20"+strYY+"-"+strMM+"-"+strDD+"-"+strHH+".json", 'r') , cls=ConcatJSONDecoder)
for each_event in f:
if(each_event["type"] == "WatchEvent"):
try:
num_stars = int(each_event["repository"]["watchers"])
created_at = each_event["created_at"]
json_entry[4][created_at] = num_stars
except Exception, e:
print e
except Exception, e:
print e
Google 大查询 SQL 命令:
SELECT repository_owner, repository_name, repository_watchers, created_at
FROM [githubarchive:github.timeline]
WHERE type = "WatchEvent"
AND repository_owner = "mojombo"
AND repository_name = "grit"
ORDER BY created_at
我真的很难过,所以在这一点上的任何建议都将不胜感激。
【问题讨论】:
-
您声称您使用的是 SSD,但您的 python 代码中硬编码的路径却暗示了其他情况。您真的将 350GB 的数据存储在 SSD 上吗?
-
当我运行诊断程序时,我的 SSD 上大约有 100GB。其余数据存储在外部。我将把它全部转移到我的主要驱动器上进行最终分析。
-
grep -r mojombo your-directory-with-github-data需要多少时间? -
您每次都运行相同的查询吗?我知道 bigquery 会缓存结果,所以如果您正在运行相同的查询,您可能不会因为再次运行该查询而收取费用
-
@liori 花了大约 25 分钟
标签: python database bigdata google-bigquery data-analysis