0
스파크 데이터 프레임으로 쌍 상관 (예 : 피어슨)을 추출하려고합니다. 필자는 추가 쿼리 및 기계 학습 입력으로 테이블 형식으로 pairwise coreelation을 사용하려고합니다. 그래서 여기스파크의 상관 행렬에서 쌍렬 상관 관계 추출
은 실행 예이다
데이터 :
import org.apache.spark.sql.{SQLContext, Row, DataFrame}
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType, DoubleType}
import org.apache.spark.sql.functions._
// rdd
val rowsRdd: RDD[Row] = sc.parallelize(
Seq(
Row(2.0, 7.0, 1.0),
Row(3.5, 2.5, 0.0),
Row(7.0, 5.9, 0.0)
)
)
// Schema
val schema = new StructType()
.add(StructField("item_1", DoubleType, true))
.add(StructField("item_2", DoubleType, true))
.add(StructField("item_3", DoubleType, true))
// Data frame
val df = spark.createDataFrame(rowsRdd, schema)
상관 행렬
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.Row
import org.apache.spark.mllib.linalg._
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.rdd.RDD
val rows = new VectorAssembler().setInputCols(df.columns).setOutputCol("corr_features")
.transform(df)
.select("corr_features")
.rdd
val items_mllib_vector = rows.map(_.getAs[org.apache.spark.ml.linalg.Vector](0))
.map(org.apache.spark.mllib.linalg.Vectors.fromML)
val correlMatrix: Matrix = Statistics.corr(items_mllib_vector, "pearson")
출력 모든 요소들의 상관 행렬이다. 각 요소 (i : j)와 상관 계수와 각 요소의 이름을 데이터 프레임으로 쌍으로 추출하고 싶습니다.
필요한 출력 :
item_from | item_to | Correlation
item_1 | item_2 | -0.0096912
item_1 | item_3 | -0.7313071
item_2 | item_3 | 0.68910356
누군가 나에게 어떤 조언을 사용하는 것이 바람직있어 로컬 하나? 어떻게 각 위치에 대한 이름과 상관 관계를 추출 할 루프를 만들겠습니까? – Duesentrieb