此问题在此处已有答案:
Opening A large JSON file(5个答案)
4年前关闭。
我有一个非常大的JSON(11 GB)文件,太大而无法读入内存。我想将其分解为较小的文件来分析数据。我目前正在使用Python和Pandas进行分析,我想知道是否有某种方法可以访问文件的块,以便它可以读入内存而不会导致程序崩溃。理想情况下,我想将多年的数据分解为较小的可管理文件,跨度约为一周,但是没有恒定的数据大小,尽管如果它们是一个设定的间隔也没关系。
下面是数据格式
{
"actor" :
{
"classification" : [ "suggested" ],
"displayName" : "myself",
"followersCount" : 0,
"followingCount" : 0,
"followingStocksCount" : 0,
"id" : "person:stocktwits:183087",
"image" : "http://avatars.stocktwits.com/production/183087/thumb-1350332393.png",
"link" : "http://stocktwits.com/myselfbtc",
"links" :
[
{
"href" : null,
"rel" : "me"
}
],
"objectType" : "person",
"preferredUsername" : "myselfbtc",
"statusesCount" : 2,
"summary" : null,
"tradingStrategy" :
{
"approach" : "Technical",
"assetsFrequentlyTraded" : [ "Forex" ],
"experience" : "Novice",
"holdingPeriod" : "Day Trader"
}
},
"body" : "$BCOIN and macd is going down ..... http://stks.co/iDEB",
"entities" :
{
"chart" :
{
"fullImage" :
{
"link" : "http://charts.stocktwits.com/production/original_10047145.png"
},
"image" :
{
"link" : "http://charts.stocktwits.com/production/small_10047145.png"
},
"link" : "http://stks.co/iDEB",
"objectType" : "image"
},
"sentiment" :
{
"basic" : "Bearish"
},
"stocks" :
[
{
"displayName" : "Bitcoin",
"exchange" : "PRIVATE",
"industry" : null,
"sector" : null,
"stocktwits_id" : 9659,
"symbol" : "BCOIN"
}
],
"video" : null
},
"gnip" :
{
"language" :
{
"value" : "en"
}
},
"id" : "tag:gnip.stocktwits.com:2012:note/10047145",
"inReplyTo" :
{
"id" : "tag:gnip.stocktwits.com:2012:note/10046953",
"objectType" : "comment"
},
"link" : "http://stocktwits.com/myselfbtc/message/10047145",
"object" :
{
"id" : "note:stocktwits:10047145",
"link" : "http://stocktwits.com/myselfbtc/message/10047145",
"objectType" : "note",
"postedTime" : "2012-10-17T19:13:50Z",
"summary" : "$BCOIN and macd is going down ..... http://stks.co/iDEB",
"updatedTime" : "2012-10-17T19:13:50Z"
},
"provider" :
{
"displayName" : "StockTwits",
"link" : "http://stocktwits.com"
},
"verb" : "post"
}
字符串
2条答案
按热度按时间dy2hfwbg1#
jq 1.5有一个流解析器(文档在http://stedolan.github.io/jq/manual/#Streaming)。从某种意义上说,它很容易使用,例如,如果你的1G文件名为1G.json,那么下面的命令将产生一个行流,每个“leaf”值包含一行:
第一个月
(The输出如下所示。请注意,每行本身都是有效的JSON。)
然而,使用流式输出可能不那么容易,但这取决于你想做什么:-)
理解流输出的关键是大多数行的格式是:
[ PATH, VALUE ]
个其中“PATH”是路径的数组表示。(当使用jq时,这个数组实际上可以用作路径。)
字符串
更多的细节,请参阅jq手册,特别是jq FAQ中关于流解析器的部分
l7mqbcuq2#
我认为你需要一个类似流解析器的东西。ijson可能会工作:
https://changelog.com/ijson-parse-streams-of-json-in-python/