[英]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.