Skip to main content
 首页 » 编程设计

python之如何在 Spark 中使用 Dataframes 的相关性

2024年10月01日33softidea

星火 2.2.0 adds对数据帧的相关支持。 有关更多信息,请参阅 pull request .

MLlib New algorithms in DataFrame-based API:

SPARK-19636: Correlation in DataFrame-based 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') 
root 
 |-- features: vector (nullable = true) 
 |-- fail_mode_meas: double (nullable = true) 
 
 
+--------------------+--------------+ 
|            features|fail_mode_meas| 
+--------------------+--------------+ 
|[0.0,0.5,0.0,0.0,...|          22.7| 
|[0.9,0.0,0.7,0.0,...|           0.1| 
|[0.0,5.1,1.0,0.0,...|           2.0| 
|[0.0,0.0,0.0,0.0,...|           3.1| 
|[0.1,0.0,0.0,1.7,...|           0.0| 
... 
 
pyspark.sql.utils.IllegalArgumentException: 'requirement failed: Currently correlation calculation for columns with dataType org.apach 
e.spark.ml.linalg.VectorUDT not supported.' 

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

请您参考如下方法:

没有可以直接使用的方法来实现你想要的。 SPARK-19636 中实现的方法的 Python 包装器存在于 pyspark.ml.stat 中:

from pyspark.ml.stat import Correlation 
 
Correlation.corr(df_cat, "features") 

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

你可以:

  • 使用 VectorAssembler 组装 features 和 fail_mode_meas,然后应用 pyspark.ml.stat.Correlation,但它将计算一些过时的值。
  • Expand vector column并使用 pyspark.sql.functions.corr但是对于大量的列来说它会很昂贵,并且在与 Python udf 一起使用时会增加大量的开销。