2017-08-25 6 views
4

私は配列に私のベクトルを転送したいので、列featuresはベクトルDTYPEここで私はSparkベクトルに.toArray()を使用した後、どのような型にする必要がありますか?

get_array = udf(lambda x: x.toArray(),ArrayType(DoubleType())) 
result3 = result2.withColumn('list',get_array('features')) 
result3.show() 

を使用しています。しかし、スパークは

net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict (for numpy.core.multiarray._reconstruct) 

私は理由はので、私はまたwork.Iが、それは転送後numpy.narrayで知ることができないget_array = udf(lambda x: x.toArray(),ArrayType(FloatType()))を、試してみました私はUDFで使用するタイプである必要があります知っているが、私はどのように示すことができることを私に伝えますそれは正しくですか?ここで

は、私は私のデータフレームの結果2を取得する方法のコードです:ここでは

df4 = indexed.groupBy('uuid').pivot('name').sum('fre') 
df4 = df4.fillna(0) 
from pyspark.ml.feature import VectorAssembler 
assembler = VectorAssembler(
    inputCols=df4.columns[1:], 
    outputCol="features") 
dataset = assembler.transform(df4) 
bk = BisectingKMeans(k=8, seed=2, featuresCol="features") 
result2 = bk.fit(dataset).transform(dataset) 

のように見えるインデックスを作成するものである:

result2
+------------------+------------+---------+-------------+------------+----------+--------+----+ 
|    uuid| category|  code| servertime|   cat|  fre|catIndex|name| 
+------------------+------------+---------+-------------+------------+----------+--------+----+ 
| 351667085527886|   398|  null|1503084585000|   398|0.37951264|  2.0| a2| 
| 352279079643619|   403|  null|1503105476000|   403| 0.3938634|  3.0| a3| 
| 352279071621894|   398|  null|1503085396000|   398|0.38005984|  2.0| a2| 
| 357653074851887|   398|  null|1503085552000|   398| 0.3801652|  2.0| a2| 
| 354287077780760|   407|  null|1503085603000|   407|0.38019964|  5.0| a5| 
|0_8f394ebf3f67597c|   403|  null|1503084183000|   403|0.37924168|  3.0| a3| 
| 353528084062994|   403|  null|1503084234000|   403|0.37927604|  3.0| a3| 
| 356626072993852| 100000504|100000504|1503104781000| 100000504| 0.3933774|  0.0| a0| 
| 351667081062615| 100000448|  398|1503083901000|   398|0.37905172|  2.0| a2| 
| 354330089551058|1.00000444E8|  null|1503084004000|1.00000444E8|0.37912107| 34.0| a34| 
+------------------+------------+---------+-------------+------------+----------+--------+----+ 

を、私はタイプdoubleといくつかの列を持っている、そして私VectorAssemblerを使用してそれらの二重列をベクトルfeaturesにアセンブルします。これは配列に転送する列です。

+0

私はそれをチェックしてください。 –

答えて

関連する問題