2017-10-08 8 views
0

頻出アイテムセットを識別するためにデータセットを処理する必要があります。したがって、入力列はベクトルでなければなりません。元の列は、カンマで区切られた項目の文字列ですので、私は次のようでした:スパークデータフレーム列をベクトルからセットに変換する方法は?

functions.split(out_1['skills'], ',') 

問題がskillsで、一部の行のために、私は重複した値であるとしようとしたとき、これは、エラーの原因となっています頻出アイテムセットを識別する。

複製された要素を削除するために、ベクトルをセットに変換したかったのです。このような何か:

functions.to_set(functions.split(out_1['skills'], ',')) 

しかし、私はつまり、何to_set関数が存在しない、設定するためのベクトルから列を変換する機能を見つけることができませんでした。

ベクターから複製された要素を削除するにはどうしたらよいですか?

答えて

2

あなたはfunctions.udf(set)を使用してUDFにPythonでset機能を変換して、配列の列に適用することができます:

df.show() 
+-------+ 
| skills| 
+-------+ 
|a,a,b,c| 
| a,b,c| 
|c,d,e,e| 
+-------+ 

import pyspark.sql.functions as F 
df.withColumn("unique_skills", F.udf(set)(F.split(df.skills, ","))).show() 
+-------+-------------+ 
| skills|unique_skills| 
+-------+-------------+ 
|a,a,b,c| [a, b, c]| 
| a,b,c| [a, b, c]| 
|c,d,e,e| [c, d, e]| 
+-------+-------------+ 
関連する問題