簡體   English   中英

嘗試緩存 s3 文件

[英]Attempting to Cache s3 files

我有兩條運行的管道。 第一個管道從 s3 讀取文件並進行一些處理並更新文件。 第二個管道運行多個作業,對於每個作業,我從 s3 下載文件並生成一些 output。我覺得通過多次下載我在第二個管道上浪費了很多時間,因為我目前在使用這些文件時不緩存這些文件多個工作。 因此,鑒於此,我試圖在本地緩存 s3 文件。

我做了一些研究,發現可以使用s3fsfsspec 到目前為止,我可以使用 s3fs 從 s3 下載並打開文件,但我不確定如何在本地緩存它。

import s3fs
import pandas as pd

FS = s3fs.S3FileSystem()

file = FS.open('s3://my-datasets/something/foo.csv')
# of = fsspec.open("filecache::s3://bucket/key", s3={'anon': True}, filecache={'cache_storage'='/tmp/files'})
df = pd.read_csv(file, sep='|', header=None)
print(df)

正如您在上面的代碼中看到的那樣,我正在從 s3 打開一個文件,然后將其讀取到 dataframe。現在我想知道是否有一個參數或我可以傳遞的東西以便緩存該文件。

另一種方法當然是我可以檢查文件是否存在於某個路徑中,如果存在則使用它,如果不存在則下載它但我覺得必須有更好的方法來進行緩存。 我願意接受任何和所有的建議。

Amazon S3 是一種 object 存儲服務,可通過經過身份驗證的 API 請求進行訪問。

s3fs等工具將 Amazon S3 呈現為文件系統,但它們需要將這種用法轉換為正常的 S3 API 調用。 當在 S3 或本地 s3fs 虛擬磁盤中進行大量更新時,更新另一端可能需要一些時間,並且在高使用情況下,它們可能會變得不同步。

s3fs 保留文件緩存這一事實意味着文件可能會更快地變得不同步,這取決於它返回並檢查 S3 中的內容是否已更改的頻率。

它基本上在您的應用程序和 S3 之間增加了另一層復雜性。 如果您可以直接使用 go ,它將始終更可靠。 但是,這意味着您可能需要自己實現一些有用的功能。

如果您打算在生產環境中使用它,我建議您創建一個測試平台來模擬適當的使用水平,以確認所有系統都按預期工作。

您可以使用 s3fs 和 fsspec 在本地緩存 S3 文件: https://filesystem-spec.readthedocs.io/en/latest/features.html#caching-files-locally

文檔中的兩個示例對我來說都很好。 似乎您實際上有第二個選項,因為您的示例中注釋掉了代碼。 那對你不起作用嗎?

無論如何,你的第一個例子是

import pandas as pd
import fsspec

fs = fsspec.filesystem("filecache", target_protocol='s3', cache_storage='/tmp/files/', check_files=True)
with fs.open('s3://my-datasets/something/foo.csv') as file:
    df = pd.read_csv(file, sep='|', header=None)

暫無
暫無

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

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