Нелинейные регрессии на больших наборах данных с использованием SparkR (или других методов?)

Я пытаюсь запустить нелинейную регрессию (NLR) для очень большого набора данных. Для небольших тестовых наборов данных у меня есть рабочий код в R, и я пытаюсь перенести его в SparkR.

Я новичок в Spark(R и других).


R (мой рабочий код):

После небольших манипуляций я получаю R-DataFrame df и запускаю следующий NLR:

nls(y1 ~ b0/(1+exp(b1+b2*y2+b3*y3)),df)

искраR:

После запуска SparkR с csv-пакетом ($ sparkR --packages com.databricks:spark-csv_2.11:1.3.0) мне удалось создать SparkR-DataFrame и запустить линейную регрессию в качестве тестового примера.

customSchema <- structType(...)
spk_df = read.df(sqlContext, path, header='true', source = "com.databricks.spark.csv", schema=customSchema)
test_linear_model <- glm(y1 ~ y2 + y3, data = spk_df)
summary(test_linear_model)

(примечание: мне пришлось создать customSchema, потому что inferSchema всегда приводила к строковым значениям, а не к двойным)

  • Как запустить NLR в SparkR? Возможно ли это, или нелинейность обязательно исключает магию распараллеливания Sparks?
  • Я предполагаю, что нет смысла просто собирать spark-df nls(y1 ~ b0/(1+exp(b1+b2*y2+b3*y3)),collect(spk_df))

вернуться к Р:

Если нелинейность мешает мне использовать искру полезным способом, как мне подходить к NLR для больших наборов данных?

Я пытался использовать пакет r ff, в частности ff-data.frames ffdf, но, как мне кажется, у меня возникли проблемы по той же причине, по которой не работает sparkR.

В принципе, я мог бы работать со строками случайно выбранных данных, как этот SO, но мой фреймворк фактически создан из манипулирования несколькими файлами/фреймворками данных, и мне нужно выбрать одни и те же случайные строки из каждого файла. Я смог создать эти случайные файлы с помощью

$ dd if=/dev/random of=rsource count=150000
$ N=500000
$ gshuf -n $N --random-source rsource first.csv > first_sample.csv
$ gshuf -n $N --random-source rsource second.csv > second_sample.csv
$ gshuf -n $N --random-source rsource third.csv > third_sample.csv

Есть ли лучшие решения? Это заставляет меня немного нервничать, потому что, хотя в принципе все файлы должны иметь одинаковое количество строк/порядок, я беспокоюсь, что иногда может быть плохое изображение.

Идеи?

Спасибо!!!


person brook    schedule 11.05.2016    source источник