簡體   English   中英

從 R 中的 AWS S3 讀取 gzip 文件的內容

[英]Reading contents of a gzip file from a AWS S3 in R

我正在嘗試從 S3 讀取壓縮后的 csv 文件

鑒於我已經有了我的數據列表

> MyKeys
[1] "2020/07/25/21/0001_part_00.gz" "2020/07/25/22/0000_part_00.gz" "2020/07/25/22/0001_part_00.gz" "2020/07/25/23/0000_part_00.gz" "2020/07/25/23/0001_part_00.gz"

使用

x<-get_object(MyKeys[1], bucket = bucket)

它返回

str(x)
 raw [1:42017043] 1f 8b 08 00 ...

我試着用

rawToChar(x)
gunzip(x, remove=FALSE)
read.table(rawConnection(get_object(MyKeys[1], bucket = bucket)))
read_delim(gzfile(get_object(touse[1], bucket = bucket)), ",", escape_double = FALSE, trim_ws = TRUE)

還有一些我不記得的技巧。

而且這些都不起作用..我迷路了。

好吧,畢竟我設法找到了解決方案。

df <- get_object(key, bucket = bucket) %>%
        rawConnection %>% 
        gzcon %>% 
        read_delim( "|", escape_double = FALSE,  trim_ws = TRUE, col_names = FALSE)

為任何遇到這種麻煩的人解釋一下

方法 Get_object 是主要的 S3 方法。 使用 rawConnection,您可以 stream gzcon,這是讀取和解壓縮 Gzip 文件的方式(某種比特流,我不知道為什么會這樣......)最后 read_delim 這對任何人來說都不是什么謎。 這是傳奇……等等……這里有一個技巧。 使用 RawConnection R 時,會在內部為您的文件分配一個向量。 它會一直呆在那里直到你關閉它。 通常你創建一個 object 然后關閉它

x<- rawConnection(<args>)
close(x)

但在這種情況下,它是使用 magrittr 的 '%>%' 即時創建的,所以我沒有參考。
如果您和我一樣,並且正在循環讀取數千個文件中數月的數據,您將收到錯誤消息

所有連接都在使用中

不用擔心.. Rawconnection store 128 files...tops.. 所以如果你存儲到一個本地文件或變量並使用“垃圾收集器方法”closeAllConnections() 並且它將所有存儲的文件擦除為 rawconnections

暫無
暫無

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

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