2016-11-01 1 views
1

多分NULL列にPySpark CountVectorizerを使用する方法:私はそれにCountVectorizerを使用してい私は私のスパークデータフレームの列を持っている

|-- topics_A: array (nullable = true) 
| |-- element: string (containsNull = true) 

topic_vectorizer_A = CountVectorizer(inputCol="topics_A", outputCol="topics_vec_A") 

私はNullPointerExceptionsがを取得し、理由topic_A列にnullが含まれることがあります。

方法はありますか?長さゼロの配列で埋めても問題ありませんが(データサイズがかなり大きくなります)、PySparkのArrayカラムでfillNaを実行する方法はありません。

答えて

1

個人的には有用な情報がないので、私はNULLという値の列を削除しますが、空の配列ではなくnullを置き換えることができます。まず、いくつかの輸入:

from pyspark.sql.functions import when, col, coalesce, array 

あなたはように、特定の型の空の配列を定義することができます。

fill = array().cast("array<string>") 

when句とそれを組み合わせる:

topics_a = when(col("topics_A").isNull(), fill).otherwise(col("topics_A")) 

か​​3210:

topics_a = coalesce(col("topics_A"), fill) 

としてそれを使用する:サンプルデータとそう

df.withColumn("topics_A", topics_a) 

df = sc.parallelize([(1, ["a", "b"]), (2, None)]).toDF(["id", "topics_A"]) 

df_ = df.withColumn("topics_A", topics_a) 
topic_vectorizer_A.fit(df_).transform(df_) 

結果は次のようになります

+---+--------+-------------------+ 
| id|topics_A|  topics_vec_A| 
+---+--------+-------------------+ 
| 1| [a, b]|(2,[0,1],[1.0,1.0])| 
| 2|  []|   (2,[],[])| 
+---+--------+-------------------+