Загрузка нескольких файлов паркета в R из URL-адреса (папка Dropbox)

Я пытаюсь загрузить несколько файлов паркета из URL-адреса моей папки Dropbox (я не устанавливал эти файлы как локальные только для экономии памяти моего компьютера). Я использовал следующий код, но он ничего не возвращает.

library(arrow)
library(dplyr)

files <- list.files(path = "https://www.dropbox.com/sh/g8ck3t859uahkdi/AADw-kp7EYfU-SMZc4mmtCM2a?dl=1", pattern = "*.parquet", full.names = T)

tbl <- sapply(files, read_parquet, simplify=FALSE) %>% 
bind_rows(.id = "id")

Я ссылался на это и этот пост, но не смог понять, как это сделать.

Для этой задачи я использовал компьютер с Windows (нужно ли установить mode на "wb"?), но при необходимости могу переключиться на Mac.


person Chris T.    schedule 24.04.2021    source источник
comment
можешь проверить length(files)   -  person akrun    schedule 24.04.2021
comment
В ссылке он читает файлы из каталога. Но в вашем коде он указывает на URL-адрес   -  person akrun    schedule 24.04.2021
comment
R возвращает length(files) = 0, но я храню в этой папке 5 файлов.   -  person Chris T.    schedule 24.04.2021
comment
Или я должен установить AADw-kp7EYfU-SMZc4mmtCM2a?dl= 0 ?   -  person Chris T.    schedule 24.04.2021
comment
Можете ли вы попробовать решение, опубликованное ниже. Меня устраивает   -  person akrun    schedule 24.04.2021
comment
@akrun Это должно работать, потому что общее количество строк для 5 файлов в этой папке — это именно то, что вы получили, но когда я вставил и выполнил ваш код на своем компьютере, последняя строка кода показывает 0. Я пытаюсь понять, почему .   -  person Chris T.    schedule 24.04.2021
comment
Вы изменили путь, т.е. /path/to/yourfolder/filenew.zip Вы можете изменить его на папку «Загрузки» или около того.   -  person akrun    schedule 24.04.2021
comment
Я тестировал это на Mac   -  person akrun    schedule 24.04.2021
comment
Нужно ли указывать новый путь к папке для filezip?   -  person Chris T.    schedule 24.04.2021
comment
я сделал точно так же, как в решении   -  person akrun    schedule 24.04.2021
comment
Я продолжал получать 0 из последней строки кода. Я думаю, что /path/to/yourfolder/ - это тот, с которым я не знаю, что делать, должен ли я заменить его временной папкой, за которой следует filenew.zip или filenew?   -  person Chris T.    schedule 24.04.2021
comment
Какой у вас getwd(). Затем, если вы хотите создать эти папки в рабочем каталоге. просто сделайте filezip <- "filenew.zip" и new_folder <- "filenew"   -  person akrun    schedule 24.04.2021
comment
Я получил предупреждающее сообщение Warning message: In unzip(filezip, exdir = new_folder) : error -1 in extracting from zip file' and still got nrow(tbl)` = 0   -  person Chris T.    schedule 24.04.2021
comment
Как я уже сказал, я сделал это в mac   -  person akrun    schedule 24.04.2021
comment
Это работает на маке   -  person akrun    schedule 24.04.2021
comment
Я попробовал это на Mac, наконец-то это работает (нужно только удалить wb). Просто интересно, может ли ваш код работать на ПК? Но ваш ответ по-прежнему высоко ценится.   -  person Chris T.    schedule 24.04.2021
comment
Возможно, есть какая-то проблема с окнами для чтения/записи паркета, как упоминалось здесь   -  person akrun    schedule 24.04.2021
comment
Спасибо. Кажется, я должен переключить эту задачу на Mac.   -  person Chris T.    schedule 24.04.2021


Ответы (1)


Если мы используем второй вариант загрузки в папку назначения, то

library(arrow)
library(purrr)
url <- "https://www.dropbox.com/sh/g8ck3t859uahkdi/AADw-kp7EYfU-SMZc4mmtCM2a?dl=1"
filezip <- "/path/to/yourfolder/filenew.zip"
new_folder <-  "/path/to/yourfolder/filenew"
download.file(url, filezip, mode = "wb")
unzip(filezip, exdir = new_folder)
files <- list.files(path = new_folder, 
            pattern = "\\.parquet$", full.names = TRUE)
tbl <- map_dfr(files, read_parquet) 
nrow(tbl)
#[1] 168019
person akrun    schedule 24.04.2021