Чтение содержимого файла gzip из AWS S3 в R - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь прочитать свой gziped csv файл из S3

Учитывая, что у меня уже есть список моих данных, например

> 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)

и еще несколько уловок, которые я не помню.

и ничего из этого не сработало .. i ' м потеряно здесь.

1 Ответ

0 голосов
/ 11 августа 2020

ну, в конце концов, мне удалось найти решение.

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 (своего рода битовый поток, я не знаю, почему это так ...), наконец, read_delim, который ни для кого не является загадкой. и это legen ... подождите ... здесь есть хитрость! при использовании RawConnection R выделяет вектор для вашего файла внутри. и он остается там, пока вы его не закроете. обычно вы создаете один объект, а затем закрываете его, как

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

, но в этом случае он создается на лету с использованием magrittr '%>%', поэтому у меня нет ссылки. если вы делаете то же самое, что и я, и читаете данные за месяцы в тысячах файлов в al oop, вы получите сообщение об ошибке

Все соединения используются

не волнуйтесь .. Rawconnection хранит 128 файлов ... вершины .. так что, если вы сохраняете в локальный файл или переменную и используете "метод сборщика мусора" closeAllConnections (), и он стирает все сохраненные файлы как rawconnections

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...