1

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

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


R(我的工作代码):

经过一些操作,我获得了 R-DataFramedf并运行以下 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 总是转换为字符串而不是双精度)

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

回到 R:

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

我试过使用 rff包,特别是 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

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

想法?

谢谢!!!

4

0 回答 0