【问题标题】:Row/column names from a correlation matrix values in SparkSpark中相关矩阵值的行/列名称
【发布时间】:2017-10-20 17:46:35
【问题描述】:

我在 spark 中计算了一个相关矩阵,我想结合它们的列名提取单个相关性。

相关矩阵

correlMatrix: org.apache.spark.mllib.linalg.Matrix = 
1.0                   -0.33333333333333254  -0.8164965809277261  -0.7777777777777787   
-0.33333333333333254  1.0                   0.8164965809277356   -0.33333333333333254  
-0.8164965809277261   0.8164965809277356    1.0                  0.27216552697591645   
-0.7777777777777787   -0.33333333333333254  0.27216552697591645  1.0

数据农场名称

colNames: Array[String] = Array(item_1, item_2, item_3, item_4)

现在我想将每个组合提取到具有以下结构的数据框中:

item_from | item_to | Correlation
item_1    | item_2  | -0.0096912
item_1    | item_3  | -0.7313071
item_2    | item_3  | 0.68910356

或者至少是带有列名的整个相关矩阵:

           item_1                item_2                item_3          item_4
item_1     1.0                   -0.33333333333333254  -0.8164965809277261  -0.7777777777777787   
item_2     -0.33333333333333254  1.0                   0.8164965809277356   -0.33333333333333254  
item_3     -0.8164965809277261   0.8164965809277356    1.0                  0.27216552697591645   
item_4     -0.7777777777777787   -0.33333333333333254  0.27216552697591645  1.0

我尝试编写一个地图函数,但它没有按我的预期工作。

你有什么解决办法吗?

【问题讨论】:

    标签: apache-spark apache-spark-sql spark-dataframe apache-spark-mllib


    【解决方案1】:
    val colNamePairs = colsNames.flatMap(c1 => colsNames.map(c2 => (c1, c2)))
    
    val triplesList = colNamePairs.zip(correlMatrix.toArray)
      .filterNot(p => p._1._1 >= p._1._2)
      .map(r => (r._1._1, r._1._2, r._2))
    
    val corrDF = sc.parallelize(triplesList).toDF("item_from", "item_to", "Correlation")
    

    colNamePairs 产生列名的所有组合 triplesList 表示由 (colName1, colName2, correlation) 组成的三元组列表

    最后,我们将其转换为具有所查找列名的 DF。

    请注意 filterNot 是可选的,只保留矩阵的一半(不包括对角线),因为它是对称的,因此是多余的,如果你想要完整的列表,只需删除它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      相关资源
      最近更新 更多