如何在 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,不过好像是另一个的前身。我对将 xy 作为输入的位置感到困惑。通常我们在 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 中。