如何在 Spark 中使用 Dataframes 的关联性?

y.s*_*hyk 8 python correlation apache-spark apache-spark-sql pyspark

Spark 2.2.0添加了对数据帧的关联支持。有关这方面的更多信息可以在拉取请求中找到。

MLlib 基于 DataFrame 的 API 中的新算法:

SPARK-19636:基于 DataFrame 的 API 中的关联 (Scala/Java/Python)

然而,完全不清楚如何使用此更改或与以前的版本相比发生了什么变化。

我期待这样的事情:

df_num = spark.read.parquet('/dataframe')
df_cat.printSchema()
df_cat.show()
df_num.corr(col1='features', col2='fail_mode_meas')
Run Code Online (Sandbox Code Playgroud)
df_num = spark.read.parquet('/dataframe')
df_cat.printSchema()
df_cat.show()
df_num.corr(col1='features', col2='fail_mode_meas')
Run Code Online (Sandbox Code Playgroud)

有人可以解释如何利用 Spark 2.2.0 的新功能来实现数据帧中的关联吗?

zer*_*323 1

没有任何方法可以直接使用来达到你想要的效果。SPARK-19636 中实现的方法的 Python 包装器位于pyspark.ml.stat

from pyspark.ml.stat import Correlation

Correlation.corr(df_cat, "features")
Run Code Online (Sandbox Code Playgroud)

但此方法用于计算单列的相关Vector矩阵

你可以:

  • 之后组装featuresfail_mode_meas使用VectorAssembler并应用pyspark.ml.stat.Correlation,但它会计算出许多过时的值。
  • 扩展向量列并使用pyspark.sql.functions.corr,但对于大量列来说会很昂贵,并且在与 Python 一起使用时会增加大量开销udf