2017-05-12 59 views
0

披露:我不是開發商或東西,只是不得不這樣做,因爲,我不得不這樣做。當然,當編碼蟒蛇編寫蟒蛇時,我感到非常自豪,但那真是太棒了。建議優化流程 - JSON - >大熊貓 - > CSV和MySQL

所以我不得不通過他們聚集API把數據從一個服務到MySQL表,並連接到它。令我驚訝的是,一切正如預期一樣工作,但有兩個問題:

  1. 腳本太慢了。執行它需要大約500-700秒。
  2. 它的工作原理,當我手動運行它,但它超時的調度。

所以我的問題給你,同胞社區,你能暗示我該怎麼讀或者,也許,改變,使其至少快一點點。

作爲一個企業的背景,我有10種不同的語言運行單獨的查詢,但在下面的代碼,我只提供一種語言,並把描述它周圍。

上安排執行超時是介於第五和第六的語言之間。

# used modules 
import requests 
import json 
import pandas as pd 
import MySQLdb 
url = 'here comes URI to service API aggregation call' 
headers = {'Integration-Key':'Key','Content-Type' : 'application/json'} 
# the next one is different request for each of 10 languages, so 10 variables. 
data_language = '''{Here comes a long long JSON request so API can aggregate it all }''' 
# requesting data from API 
# Again, 10 times for the next block 
response = requests.post(url, headers=headers, data=data_en) 
json_data = json.loads(response.text) 
df_en = pd.DataFrame(json_data['results']) 
# So on schedule, it time outs after 5th or 6th language 
# creating merged table 
df = pd.concat([df_en,df_sv,and_so_on],ignore_index=True) 
db=MySQLdb.connect(host="host", user="user",passwd="pws",db="db") 
df.to_sql(con=db, name='nps', if_exists='replace', flavor='mysql') 

回答

0

我從來沒有發現to_sql適用於大數據集。我建議將您的數據框轉換爲CSV,然後使用psycopg2在您的表格中執行批量COPY

+0

謝謝!我會盡力去做 - 希望它能加快速度。但是,我仍然需要確定如何確保腳本在此行之前執行並且沒有超時... –

+0

哪一行導致超時? – thomaskeefe

+0

所以我有這三條線各10種語言的 - 無法弄清楚如何通過循環做到這一點,所以是的,30重複lines.And它實際上導致對json.loads誤差()的一部分,所以我想它可能(),請問requests.post() –