我正在尝试对非常大的数据集运行非线性回归(NLR)。对于较小的测试数据集,我在R中有工作代码,我正在尝试将其移植到SparkR。
我是Spark(R和其他)的新手。
经过一些操作后,我获得了R-DataFrame df
并运行了以下NLR:
nls(y1 ~ b0/(1+exp(b1+b2*y2+b3*y3)),df)
使用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总是转换为字符串而不是双打)
nls(y1 ~ b0/(1+exp(b1+b2*y2+b3*y3)),collect(spk_df))
如果非线性正在阻止我以有用的方式使用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
有更好的解决方案吗?这让我有点紧张,因为虽然原则上文件应该是相同数量的行/顺序我担心有时可能会有一个坏图像。
想法?
感谢!!!