2016-06-03 18 views
5

Desidero utilizzare la funzione pyspark.mllib.stat.Statistics.corr per calcolare la correlazione tra due colonne dell'oggetto pyspark.sql.dataframe.DataFrame. La funzione corr si aspetta di prendere uno rdd di oggetti Vectors. Come faccio a tradurre una colonna di df['some_name'] in rdd di Vectors.dense oggetto?Correlazione calcolo Pyspark

risposta

5

Non ci dovrebbe essere bisogno di quello. Per numerica è possibile calcolare la correlazione direttamente utilizzando DataFrameStatFunctions.corr:

df1 = sc.parallelize([(0.0, 1.0), (1.0, 0.0)]).toDF(["x", "y"]) 
df1.stat.corr("x", "y") 
# -1.0 

altrimenti è possibile utilizzare VectorAssembler:

from pyspark.ml.feature import VectorAssembler 

assembler = VectorAssembler(inputCols=df.columns, outputCol="features") 
assembler.transform(df).select("features").flatMap(lambda x: x) 
+0

Supporta solo Pearson. – VJune

1

Ok ho capito:

v1 = df.flatMap(lambda x: Vectors.dense(x[col_idx_1])) 
v2 = df.flatMap(lambda x: Vectors.dense(x[col_idx_2]))