Корреляция вычислений Pyspark


Я хочу использовать функцию pyspark.mllib.stat.Statistics.corr для вычисления корреляции между двумя столбцами объекта pyspark.sql.dataframe.DataFrame. Функция corr ожидает взять rdd из Vectors объектов. Как перевести столбец df['some_name'] в rdd объекта Vectors.dense?

2 6

2 ответа:

В этом не должно быть необходимости. Для численных расчетов корреляцию можно вычислить непосредственно с помощью DataFrameStatFunctions.corr:

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

В противном случае вы можете использовать VectorAssembler:

from pyspark.ml.feature import VectorAssembler

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

Ладно, я понял:

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