2017-08-29 54 views
0

假設我有很多JSON條目,它們都包含兩個字段,ab。當讀取每個JSON時(假設我們分別讀取a_0b_0的值分別爲ab),我想查看有多少個JSON條目有b = a_0。有沒有一種有效的方式來做到這一點?如果數據大於10GB,我應該將它轉爲數據庫嗎?代碼將在Python如何在python中搜索多個json數據?

編輯0:總數據大小將> 100GB,因此有必要縮放代碼。這可能意味着我無法將數據放入內存。

編輯1:基本上我們沒有看到數據['a'] ==數據['b']。我希望看到:對於具有a_0和b_0的特定json條目,其餘json條目中滿足a_0 = b要求的條數有多少。希望這一次更清楚。

+4

是的,對於那麼大的數據你應該使用數據庫。 – wim

+0

你有什麼嘗試?它會是一次性的嗎?它需要多次運行嗎? 10GB不是很多數據,但它可能不適合你的記憶。您仍然可以在幾秒鐘內解析這些信息,但如果您的應用程序要求更快的響應,則這可能還不夠。 –

+0

更新了問題。數據可能無法適應內存大小。 –

回答

0

對於大型數據集,您應該使用數據庫。如果你讓我們知道你正在開發什麼樣的應用程序,我們可能會爲你推薦一個特定的數據庫引擎。

然而,對於較小的數據集時,Python代碼將是:

list = filter(lambda json: json['a']==json['b'], json_data) 

一個甚至做的更有效的方法是使用列表理解:

list = [json for json in json_data if json['a']==json['b']] 

很顯然,如果你是使用數據庫,您只需查詢。

+0

如果我無法將數據放入內存,有沒有辦法做到這一點? –

+0

究竟哪個內存? – Y2H

+0

我有一臺16GB內存的機器,數據比這個大5倍。也就是說,我無法將所有條目加載到內存中以進行快速內存搜索。 –

0

據我瞭解,你有一個包含多個JSON的文件。

最內存高效的方法如下:

import json 


def valid_json_count(filename): 
    counter = 0 
    with open(filename) as fin: 
     for line in fin: 
      data = json.loads(line) 
      if data['a'] == data['b']: 
       counter += 1 
    return counter 

它通過行處理文件線和內存

但一般並不包含所有的數據將你的數據轉換成數據庫將是最好的解決方案。任何DB都可以輕鬆處理這樣一個簡單的問題。如果你想要一個快速和骯髒的解決方案,請看看sqlite - 它帶有Python,並且可以開箱即用。

+0

感謝您的回覆!問題是,我需要在不同的json條目中找到位置a和b。也就是說,假設我有一個具有a_0和b_0的特定json條目。我想迭代所有其他條目來查看:有多少個數據[「b」] == data_specific [「a」]] –