Scala Spark - 使用带有mllib

时间:2015-09-21 19:40:57

标签: scala apache-spark apache-spark-mllib

我有RDD [List [Double],List [Double]]形式的数据,例如:

sampleData =
    (
        ((1.1, 1.2, 1.3), (1.1, 1.5, 1.2)),
        ((3.0, 3.3, 3.3), (3.1, 3.2, 3.6))
    )

我想调用Statistics.corr(a,b),其中a来自第一个List [Double],b来自第二个List [Double]

我想要的结果是来自(1.1,1.2,1.3),(1.1,1.5,1.2)和(3.0,3.3,3.3),(3.1,3.2,3.6)的corr()函数的2个相关值

我尝试的解决方案是:

Statistics.corr(sampleData.flatMap(_._1), sampleData.flatMap(_._2))

这给了我一个单一的相关(1.1,1.2,1.3,3.0,3.3,3.3),(1.1,1.5,1.2,3.1,3.2,3.6),这不是我想要的

1 个答案:

答案 0 :(得分:0)

这需要map而不是flatmap,因为你想要将RDD的行分开。

不幸的是,我还没有意识到可以在两个List [Double]上运行的可序列化相关函数。我检查的第一个地方是Pearson correlation from Apache Commons,但它不可序列化。您可能必须编写自己的函数(但我会先花费一些额外的努力)。一旦你有了相关函数,你将使用它如下:

sampleData.map(x => correlation(x._1,x._2))

这仍然是一个RDD,除了订单之外它没有引用它来自的原始行,所以你可能想要传递原始数据(或者,至少,它曾经拥有的任何id)