簡體   English   中英

Python從內存中的CSV讀取數據並將其以多線程方式寫入cassandra

[英]Python reading data from CSV in memory and writing it to cassandra in multi threaded

我對python有點陌生,我當前的代碼下載了csv文件,並以單線程的形式將其導入cassandra中。 有沒有一種方法可以創建5個或10個線程來拆分csv文件(行)並並行讀取並在Cassandra中將行插入每個線程一行? ,我正在嘗試創建一個股票交易數據庫來存儲所有的報價數據庫,從而尋找提高代碼和方法性能的方法。 如果問題聽起來有點愚蠢,請忽略我。

    conn = requests.get(url, stream=True)
    if conn.status_code == 200:
       zfile = zipfile.ZipFile(io.BytesIO(conn.content))
       zfile.extractall()
       with open(csv_file) as csv_d:
       csv_content = csv.reader(csv_d)
       for row in csv_content:
           symbol = row[0]
           stype = row[1]
           openp = row[2]
           highp = row[3]
           lowp = row[4]
           closep = row[5]
           vol = row[8]
           dtime = row[10]
           cassa.main('load', symbol, dtime, stype, openp, highp, lowp, closep, vol)

  csv_d.close()
  os.remove(csv_file)
  logging.info("csv file processed succesfully") 

感謝和問候

如果您碰巧使用了DataStax Python驅動程序,則除了同步API外,這還將為您提供一個異步API。 使用異步API,您可以嘗試一系列不同的方法:

  • 批量期貨:並行啟動多個異步查詢以等待它們完成; 重復
  • 排隊的期貨:將期貨添加到隊列中; 每次將新的前途添加到隊列中時,請等待最舊的前途完成

在本文檔中,您可以找到更多有關如何實現此目標的想法。

我在Java中執行此操作的方式(我認為python會類似)是使用工作線程池。 您將在執行操作時在單個線程中讀取csv文件,但是在for循環中,您將把每一行分派到線程池中的線程。

工作線程將對它們的單行進行同步插入並返回。

線程池的大小控制您將並行運行多少個插入。 在某種程度上,工作池越大,整個文件的導入就會越快(受群集的最大吞吐量限制)。

另一種方法是使用單個線程並使用異步模式進行插入。 在Java中,它稱為executeAsync,它將CQL語句發送到Cassandra,並立即返回而不會阻塞,從而使您獲得與並行運行的許多插入相同的效果。

您也可以考慮使用“從文件.file.csv復制...”。 CQL命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM