使用scala在Spark中查看相关矩阵的所有列

Posted

技术标签:

【中文标题】使用scala在Spark中查看相关矩阵的所有列【英文标题】:Seeing all columns of a correlation matrix in Spark using scala 【发布时间】:2020-08-06 12:26:25 【问题描述】:

我正在尝试训练一个 k-means 模型,目前正在检查我的特征向量中的相关性。

当我针对我的特征向量运行 pearson 相关时,我无法看到所有特征的结果。

我运行的代码是:

val cor = Correlation.corr(scoringDf, "features")
cor.show(false)

相关性运行良好,但是当我尝试使用 show 方法查看结果时(因为 Correlation.corr 返回一个 Datafame 对象),结果显示为

|1.0                  0.18047211468479446  0.08002566273874058   ... (5 total)
0.18047211468479446  1.0                  0.02926796076983553   ...
0.08002566273874058  0.02926796076983553  1.0                   ...
0.30256416877032244  0.15974389490583188  0.054692657400425136  ...
0.3408783412055776   0.13008391583866225  0.04241296238931376   ...|

有没有办法查看隐藏的列?

我也试过下面的代码,但结果是一样的。

val Row(coeff1: Matrix) = Correlation.corr(scoringDf, "features").head
println(s"Pearson correlation matrix:\n $coeff1")

编辑:

这里是 cor 数据框的架构

root
 |-- pearson(features): matrix (nullable = false)

【问题讨论】:

【参考方案1】:

最后我能够以我想要的方式获得输出。 将我的代码更改为如下所示

val Row(coeff1: Matrix) = Correlation.corr(scoringDf, "features").head
println(s"Pearson correlation matrix:\n " + coeff1.toString(10, 100000))

输出显示如下:

Pearson correlation matrix:
 1.0                  0.1804721146847944   0.08002566273874055   0.3025641687703226   0.34087834120557725   
0.1804721146847944   1.0                  0.02926796076983553   0.15974389490583193  0.13008391583866233   
0.08002566273874055  0.02926796076983553  1.0                   0.05469265740042514  0.042412962389313726  
0.3025641687703226   0.15974389490583193  0.05469265740042514   1.0                  0.241118490251708     
0.34087834120557725  0.13008391583866233  0.042412962389313726  0.241118490251708    1.0 

【讨论】:

【参考方案2】:

方法 show() 有几个选项,例如你可以试试:

def show(numRows: Int, truncate: Int, vertical: Boolean): Unit

numRows 要显示的行数

截断 如果设置为大于 0,则截断字符串以截断字符,并且所有单元格将右对齐。

垂直 如果设置为 true,则垂直打印输出行(每列值一行)。

您可以查看文档。

http://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.sql.Dataset

希望对你有帮助。

问候。

【讨论】:

它没有帮助,即使使用上述定义后,我得到类似的输出 我改了答案,也许能帮上忙。 顺便问一下,您使用的是 spark-shell、spark-submit、IntelliJ 还是 Eclipse? 我正在使用 Jupyter 笔记本。顺便说一句,我刚刚用 cor 数据框的模式编辑了我的问题。我怀疑它的 Matrix 类型不允许显示所有字段 我找到了问题的答案。

以上是关于使用scala在Spark中查看相关矩阵的所有列的主要内容,如果未能解决你的问题,请参考以下文章

spark实现ALS矩阵分解-附scala代码

spark实现ALS算法-附scala代码

spark实现ALS算法-附scala代码

如何从 Scala 中的 DataFrame 在 Spark 中创建分布式稀疏矩阵

scala加载spark MLlib等所有相关jar的问题

如何使用scala开发spark作业,并访问hive