2017-04-07 1 views
0

(py)Sparkには2つの新人質問があります。(py)スパークパラレル化最尤法計算

from scipy.stats import multivariate_normal 
from pyspark.sql.functions import UserDefinedFunction 
from pyspark.sql.types import DoubleType 

mle = UserDefinedFunction(multivariate_normal.pdf, DoubleType()) 
mean =1 
cov=1 
df_with_mle = df.withColumn("MLE", mle(df['reading'])) 

これはエラーをスローせずに実行します:私は、私はこれはUserDefinedFunctionを使用して、私の試みですscipyのダウンロードのmultivariate_normal.pdf()

rdd_dat = spark.sparkContext.parallelize([(0, .12, "a"),(1, .45, "b"),(2, 1.01, "c"),(3, 1.2, "a"), 
             (4, .76, "a"),(5, .81, "c"),(6, 1.5, "b")]) 
df = rdd_dat.toDF(["id", "reading", "category"]) 
df.show() 
+---+-------+--------+ 
| id|reading|category| 
+---+-------+--------+ 
| 0| 0.12|  a| 
| 1| 0.45|  b| 
| 2| 1.01|  c| 
| 3| 1.2|  a| 
| 4| 0.76|  a| 
| 5| 0.81|  c| 
| 6| 1.5|  b| 
+---+-------+--------+ 

を使用して「読み」列の可能性を計算する、以下のようにデータフレームを持っています

df_with_mle.show() 
An error occurred while calling o149.showString. 

:私は結果df_with_mleを見たいとき、しかし、私は以下のエラーが出ます1)なぜこのエラーが発生するのですか?

2)私は次のように、meancovを指定したい場合:私はこれを行うことができますどのように、df.withColumn("MLE", mle(df['reading'], 1, 1))

答えて

0

scipyのmultivariate_normal.pdf()メソッドは、シリーズを受信する予定です。 pandasデータフレームの列はシリーズですが、PySparkデータフレームの列は異なる種類のオブジェクト(pyspark.sql.column.Column)です。これはScipyが処理方法を知らないためです。

また、これは関数呼び出しの実行を維持しません。関数定義はパラメータを指定せずに終了します。covとmeanは、メソッド呼び出し内で発生しない限り、APIでは明示的に定義されません。 MeanとCovはパラメータとして設定し、既定値を上書きするまで整数オブジェクトです(scipyドキュメントの平均= 0、cov = 1、

multivariate_normal.pdf(x=df['reading'], mean=mean,cov=cov) 
関連する問題