首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大数据分析

大数据分析
EN

Stack Overflow用户
提问于 2014-08-02 23:04:12
回答 2查看 205关注 0票数 1

我正试图分析大量的GitHub存档数据,并被许多限制所困扰。

所以我的分析也要求我搜索一个350 So的数据集。我有一个本地副本的数据,也有一个副本可以通过谷歌BigQuery。本地数据集被分成25000个单独的文件。数据集是事件的时间线。

我想绘制每个存储库自创建以来拥有的星星数。(仅适用于目前超过1000的回购)

我可以非常快地使用Google BigQuery获得这个结果,但它每次“分析”13.6GB的数据。这将我限制在<75请求,而不必支付每增加75美元5美元。

我的另一个选择是搜索我的本地副本,但是在每个文件中搜索一个特定的字符串(存储库名)太长了。在一个SSD驱动器上花了一个多小时才通过了一半的文件,然后我终止了这个过程。

我有什么更好的方法来分析这么多的数据呢?

用于搜索所有本地文件的Python代码:

代码语言:javascript
复制
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命令:

代码语言:javascript
复制
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

我真的很困惑,所以在这一点上的任何建议都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-08 22:13:36

我找到了解决这个问题的方法--使用一个数据库。我将JSON数据的360+GB中的相关数据导入到MySQL数据库中,并对其进行了查询。过去每个元素的3hour+查询时间变成了<10秒。

MySQL不是一件容易设置的事情,导入花费了大约7.5个小时,但是结果让我觉得它是值得的。

票数 0
EN

Stack Overflow用户

发布于 2014-08-03 03:07:34

如果大多数BigQuery查询只扫描数据的一个子集,则可以执行一个初始查询来提取该子集(使用“允许大结果”)。然后,对您的小表的后续查询将减少成本。

例如,如果只查询类型= "WatchEvent“的记录,则可以运行如下查询:

代码语言:javascript
复制
SELECT repository_owner, repository_name, repository_watchers, created_at
FROM [githubarchive:github.timeline]
WHERE type = "WatchEvent"

并设置目标表和“允许大结果”标志。此查询将扫描整个13.6GB,但输出仅为1GB,因此对output表的后续查询最多只收取1GB的费用。

对你来说,这可能还不够便宜,但只是把选择抛到了一边。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25100168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档