Я пытаюсь запустить нелинейную регрессию (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
Есть ли лучшие решения? Это заставляет меня немного нервничать, потому что, хотя в принципе все файлы должны иметь одинаковое количество строк/порядок, я беспокоюсь, что иногда может быть плохое изображение.
Идеи?
Спасибо!!!