2017-07-14 71 views
1

Spark 2.2.0 adds數據幀的相關支持。 關於這方面的更多信息可以在pull request找到。如何在Spark中使用數據框中的關聯?

MLlib 基於數據幀API的新算法:

SPARK-19636:基於數據幀API(斯卡拉/ 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功能在dataframes相關的優勢在哪裏?

回答

2

沒有辦法可以直接用來實現你想要的。於火花19636實施的方法Python包裝存在於pyspark.ml.stat

from pyspark.ml.stat import Correlation 

Correlation.corr(df_cat, "features") 

但這種方法被用來計算相關矩陣爲單個Vector

,你可以:

  • 使用VectorAssembler組裝featuresfail_mode_meas和應用pyspark.ml.stat.Correlation之後,但它會計算一些過時的值。
  • Expand vector column並使用pyspark.sql.functions.corr但是對於大量的列將會很昂貴,並且在與Python udf一起使用時會增加大量的開銷。
+0

非常感謝。將特徵向量與另一列進行組合以進行相關是最佳選擇。即使有開銷,它也比把DF轉換成熊貓更快。另一方面,擴展矢量列非常緩慢。 –

+0

@yauheni_selivonchyk - 你可以請張貼你做了什麼來實現這一點。這將是很大的幫助。謝謝。基本上「使用VectorAssembler組裝功能和fail_mode_meas」 - 本部分。 – Satya

相關問題