使用SparkR(或其他方法?)的大型数据集的非线性回归?

时间:2016-05-11 17:51:08

标签: r apache-spark sparkr non-linear-regression

我正在尝试对非常大的数据集运行非线性回归(NLR)。对于较小的测试数据集,我在R中有工作代码,我正在尝试将其移植到SparkR。

我是Spark(R和其他)的新手。

R(我的工作代码):

经过一些操作后,我获得了R-DataFrame df并运行了以下NLR:

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

sparkR:

使用csv-package($ sparkR --packages com.databricks:spark-csv_2.11:1.3.0)启动SparkR后,我设法创建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总是转换为字符串而不是双打)

  • 你如何在SparkR中运行NLR?是否有可能或非线性是否必然排除Sparks的并行魔术?
  • 我认为收集spark-df nls(y1 ~ b0/(1+exp(b1+b2*y2+b3*y3)),collect(spk_df))
  • 没有任何好处

回到R:

如果非线性正在阻止我以有用的方式使用spark,那么我应该如何处理大型数据集的NLR?

我尝试过使用r ff软件包,特别是ff-data.frames ffdf,但我想,我遇到了麻烦,因为sparkR失败了。

我原则上可以使用一排随机选择的数据,就像this 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

有更好的解决方案吗?这让我有点紧张,因为虽然原则上文件应该是相同数量的行/顺序我担心有时可能会有一个坏图像。

想法?

感谢!!!

0 个答案:

没有答案