繁体   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