0
私は、ペアワイズ相関(spear dataframe)にペアワイズ相関(例えばピアソン)を抽出しようとしています。私は、さらなるクエリや機械学習の入力として、表形式のペアワイズ協調を使用したいと考えています。だからここスパークにおける相関行列からペアワイズ相関を抽出する
が実行されている例です。
データ:
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