如何在 Spark Scala 中执行方差分析?
How to perform ANOVA in Spark Scala?
所以我有这两个变量:
x: 1 0 1 1 0 1 1 0 ...
和
y: 4 3 12 9 2 7 23 ...
以前我可以使用以下代码在 R
中执行方差分析:
stats <- anova( lm( as.matrix(y) ~ as.factor(x) ) )
它会给出这个结果:
> anova( lm( as.matrix(y) ~ as.factor(x) ) )
Analysis of Variance Table
Response: as.matrix(y)
Df Sum Sq Mean Sq F value Pr(>F)
as.factor(x) 1 2020 2019.99 5.1431 0.02426 *
Residuals 231 90727 392.76
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
现在我想使用 Scala 代码将此代码转换为 Spark。如何做到这一点?
我已经尝试过 this API,但我很困惑,因为 API 仅将 1 个变量作为输入,而 R
中的 anova
使用 2 个输入.
我也找到了this API,不过好像是另一个的前身。我对将 x
和 y
作为输入的位置感到困惑。通常我们在 API 中有因变量和自变量,我们可以在其中放置输入,但我似乎无法在这里找到它。
我的 Spark 版本是 2.1.1。
在R
中,您需要提供从y ~ x 的映射,其中y
是连续变量,x
是分类变量。在你引用的Spark
代码中也是一样的:
val catTuple = spark.sql("select color, price from cars").toDF(colnames: _*).as[CatTuple]
这里 color
是分类变量,price
是连续变量。
在你的第二个例子中(奇怪的数据结构!),你需要提供一个Iterable[RDD[Double]]
,这意味着你的数据中的每个类别都应该放在一个单独的 RDD 中。
所以我有这两个变量:
x: 1 0 1 1 0 1 1 0 ...
和
y: 4 3 12 9 2 7 23 ...
以前我可以使用以下代码在 R
中执行方差分析:
stats <- anova( lm( as.matrix(y) ~ as.factor(x) ) )
它会给出这个结果:
> anova( lm( as.matrix(y) ~ as.factor(x) ) )
Analysis of Variance Table
Response: as.matrix(y)
Df Sum Sq Mean Sq F value Pr(>F)
as.factor(x) 1 2020 2019.99 5.1431 0.02426 *
Residuals 231 90727 392.76
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
现在我想使用 Scala 代码将此代码转换为 Spark。如何做到这一点?
我已经尝试过 this API,但我很困惑,因为 API 仅将 1 个变量作为输入,而 R
中的 anova
使用 2 个输入.
我也找到了this API,不过好像是另一个的前身。我对将 x
和 y
作为输入的位置感到困惑。通常我们在 API 中有因变量和自变量,我们可以在其中放置输入,但我似乎无法在这里找到它。
我的 Spark 版本是 2.1.1。
在R
中,您需要提供从y ~ x 的映射,其中y
是连续变量,x
是分类变量。在你引用的Spark
代码中也是一样的:
val catTuple = spark.sql("select color, price from cars").toDF(colnames: _*).as[CatTuple]
这里 color
是分类变量,price
是连续变量。
在你的第二个例子中(奇怪的数据结构!),你需要提供一个Iterable[RDD[Double]]
,这意味着你的数据中的每个类别都应该放在一个单独的 RDD 中。