我正在尝试从S3读取gzip压缩的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,您可以流式传输gzcon,这是读取和解压缩Gzip文件的方式(某种比特流,我不知道为什么会这样...)finaly read_delim这对任何人都不会有任何误解。它是legen ...等等...这里有个窍门!使用RawConnection R时,会在内部为文件分配向量。并一直呆在那里直到您将其关闭。通常,您创建一个对象然后将其关闭
x<- rawConnection(<args>)
close(x)
但是在这种情况下,它是使用magrittr的'%>%'动态创建的,因此我没有引用。
如果您执行的操作与我相同,并且您正在循环读取数千个文件中的几个月数据,那么您将收到错误消息
所有连接都在使用中
不用担心。Rawconnection存储128个文件...顶部..因此,如果您存储到本地文件或变量中并使用“垃圾收集器方法” closeAllConnections(),它将所有存储的文件作为rawconnections擦除
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句