【问题标题】:How to calculate a correlation matrix in Spark using scala?如何使用 scala 在 Spark 中计算相关矩阵?
【发布时间】:2022-08-06 03:38:57
【问题描述】:

在 python pandas 中,当我有这样的 dataframe df

c1 c2 c3
0.1 0.3 0.5
0.2 0.4 0.6

我可以使用df.corr() 来计算相关矩阵。

我如何用 scala 在 spark 中做到这一点?

我看过官方文档,数据结构和上面的不一样。我不知道如何转移它。

更新一:

val df = Seq(
    (0.1, 0.3, 0.5,0.6,0.8,0.1, 0.3, 0.5,0.6,0.8),
    (0.2, 0.4, 0.6,0.7,0.7,0.2, 0.4, 0.6,0.7,0.7),
).toDF(\"c1\", \"c2\", \"c3\",\"c4\",\"c5\",\"c6\", \"c7\", \"c8\",\"c9\",\"c10\")

val assembler = new VectorAssembler().setInputCols(Array(\"c1\", \"c2\", \"c3\",\"c4\",\"c5\",\"c6\", \"c7\", \"c8\",\"c9\",\"c10\")).setOutputCol(\"vectors\")

当列数为 10 时如何显示整个结果?

标签: scala apache-spark pyspark


【解决方案1】:

您可以使用以下代码解决您的问题。它将应用 Pearson 相关性,这也是 Pandas 函数的标准。

import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.ml.stat.Correlation

val df = Seq(
    (0.1, 0.3, 0.5),
    (0.2, 0.4, 0.6),
).toDF("c1", "c2", "c3")

val assembler = new VectorAssembler()
  .setInputCols(Array("c1", "c2", "c3"))
  .setOutputCol("vectors")

val transformed = assembler.transform(df)

val corr = Correlation.corr(transformed, "vectors").head

println(s"Pearson correlation matrix:\n $corr")

【讨论】:

  • 有用 !谢谢 !顺便说一句,println 显示 ...。如何解决?
  • 这听起来很奇怪。语法对我来说是正确的。你在什么环境下工作?难道是三个点隐藏了输出?
  • 是的 。我不知道如何在控制台中显示所有输出......
  • 如果您提供有关您正在使用的工具(Databricks?、Jupyter?、特定 IDE?)的更多详细信息,我也许可以为您指明正确的方向 :)
  • 谢谢~我是scala spark shell
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 2012-10-01
  • 1970-01-01
  • 2020-08-06
  • 2016-06-12
  • 1970-01-01
  • 2019-12-23
相关资源
最近更新 更多