2017-07-14 5 views
1

スパーク2.2.0 addsデータフレームの相関サポート。 詳細についてはpull requestをご覧ください。スパークとデータフレームとの相関関係を使用するには?

MLlib DATAFRAMEベースの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.' 

を誰かがデータフレームで相関のために新しいスパーク2.2.0機能を利用する方法を説明できますか?

答えて

2

あなたが望むものを達成するために直接使用できる方法はありません。 SPARK-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

関連する問題