Загрузить файл размером более 2,15 ГБ в формате R

У меня есть ручной процесс, когда я загружаю файл размером 5-6 ГБ на веб-сервер через curl:

curl -X POST --data-binary @myfile.csv http://myserver::port/path/to/api

Этот процесс работает нормально, но я хотел бы автоматизировать его с помощью R. Проблема в том, что я либо не знаю, что делаю, либо библиотеки R для curl не знают, как обрабатывать файлы размером более ~ 2 ГБ. :

library(RCurl)
postForm(
     "http://myserver::port/path/to/api",
      file = fileUpload(
        filename = path.expand("myfile.csv"),
        contentType = "text/csv"
      ),.encoding="utf-8")

Урожайность Error: Internal Server Error

httr тоже не работает:

library(httr)
POST(
      url = "http://myserver:port/path/to/api",
      body = upload_file(
        path =  path.expand("myfile.csv"),
        type = 'text/csv'),
      verbose()
    )

Который дает:

Response [http://myserver:port/path/to/api]
  Date: 2015-06-30 11:11
  Status: 400
  Content-Type: <unknown>
<EMPTY BODY>

httr немного более информативен с опцией verbose(), говоря мне:

-> POST http://myserver:port/path/to/api
-> User-Agent: libcurl/7.35.0 r-curl/0.9 httr/1.0.0
-> Host: http://myserver::port
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Type: text/csv
-> Content-Length: -2147483648
-> Expect: 100-continue
-> 
<- HTTP/1.1 400 Bad Request
<- Server: Apache-Coyote/1.1
<- Transfer-Encoding: chunked
<- Date: Tue, 30 Jun 2015 11:11:11 GMT
<- Connection: close
<- 

Content-Length: -2147483648 подозрительно похоже на переполнение 32-битного целого числа, поэтому я думаю, что это ошибка в httr. Я подозреваю, что RCurl испытывает аналогичный сбой.

Мне бы очень хотелось иметь минимальную оболочку вокруг curl -X POST --data-binary, но кроме этого, каковы мои варианты загрузки довольно больших файлов из R?


person Zach    schedule 30.06.2015    source источник
comment
Я предполагаю, что вы используете последнюю версию httr, которая использует curl пакет R. Если вы не можете заставить его работать, используя пакет Jeroen напрямую (в обход httr), может быть быстрее создать проблему на github.   -  person joran    schedule 30.06.2015
comment
@joran Да, я использую httr, который зависит от curl. Я создал проблему с github, но пока мне любопытно узнать, загружает ли кто-нибудь файл размером более 2,2 ГБ в веб-службу из R. Я не могу быть первым человеком в истории, который пытается это сделать...   -  person Zach    schedule 30.06.2015
comment
Тем временем вы, вероятно, могли бы использовать system для прямого вызова curl.   -  person tonytonov    schedule 01.07.2015
comment
@tonytonov Хорошая идея, сейчас попробую.   -  person Zach    schedule 01.07.2015
comment
Не то, чтобы это очень помогло, но вы можете добавить, какую ОС и версию, а также какую версию R вы используете.   -  person smci    schedule 19.07.2015
comment
revolutionanalytics.com/academic-and-public-service-programs вы пробовали пакет RevoScaleR?   -  person costebk08    schedule 20.07.2015
comment
@costebk08 costebk08 Я не думаю, что RevoScaleR включает замену curl.   -  person Zach    schedule 20.07.2015
comment
@BrandonBertelsen См. комментарий tonytonov   -  person Zach    schedule 24.07.2015


Ответы (1)


Эта ошибка исправлена ​​в версии httr/curl для разработчиков:

devtools::install_github("jeroenooms/curl")
devtools::install_github("hadley/httr")

Это ошибка в httr и curl для R. Ошибка была исправлено на GitHub по состоянию на 2 июля 2015 г., и вскоре это изменение будет распространено на CRAN.

Также возможно, что я неправильно вызывал RCurl в приведенной выше команде, но я никогда не мог понять правильный вызов.

person Zach    schedule 20.07.2015
comment
Если вы на самом деле скопировали и вставили указанную выше команду, значит вы опечатались uft-8, это utf-8 - person zerweck; 24.07.2015
comment
@zerweck Хороший улов! Я думаю, вы можете использовать кнопку (edit) под моим сообщением, чтобы предложить изменения, которые я затем смогу просмотреть. - person Zach; 24.07.2015