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