Apache spark 如何在可能为空的列上使用PySpark CountVectorier

Apache spark 如何在可能为空的列上使用PySpark CountVectorier,apache-spark,pyspark,apache-spark-mllib,Apache Spark,Pyspark,Apache Spark Mllib,我的Spark数据框中有一列: |-- topics_A: array (nullable = true) | |-- element: string (containsNull = true) 我正在使用CountVectorizer: topic_vectorizer_A = CountVectorizer(inputCol="topics_A", outputCol="topics_vec_A") 我得到了NullPointerException,因为有时候主题列包含null

我的Spark数据框中有一列:

 |-- topics_A: array (nullable = true)
 |    |-- element: string (containsNull = true)
我正在使用CountVectorizer:

topic_vectorizer_A = CountVectorizer(inputCol="topics_A", outputCol="topics_vec_A")
我得到了NullPointerException,因为有时候主题列包含null


有办法解决这个问题吗?用一个零长度数组填充它可以(尽管它会大大增加数据大小),但我无法解决如何在PySpark中对数组列进行填充。

我个人会删除带有
NULL
值的列,因为那里没有有用的信息,但可以用空数组替换NULL。首先是一些进口:

从pyspark.sql.functions导入when、col、coalesce、array
可以将特定类型的空数组定义为:

fill=array().cast(“数组”)
并将其与
when
子句结合使用:

topics\u a=when(col(“topics\u a”).isNull(),fill)。否则(col(“topics\u a”))
合并

topics_a = coalesce(col("topics_A"), fill)
并将其用作:

df.withColumn(“主题A”,主题A)
因此,使用示例数据:

df=sc.parallelize([(1,[“a”,“b”]),(2,无)]).toDF([“id”,“topics_a”])
df_uu=df.withColumn(“主题A”,主题A)
主题向量器拟合(df)变换(df)
结果将是:

+---+--------+-------------------+
|id |主题|主题|向量||
+---+--------+-------------------+
|1 |[a,b]|(2[0,1],[1.0,1.0])|
|  2|      []|          (2,[],[])|
+---+--------+-------------------+
根据评论,我在标记化之前使用了以下语法进行解析:

删除空值
clean_text_ddf.where(col("title").isNull()).show()
cleaned_text=clean_text_ddf.na.drop(subset=["title"])
cleaned_text.where(col("title").isNull()).show()
cleaned_text.printSchema()
cleaned_text.show(2)

+-----+
|title|
+-----+
+-----+

+-----+
|title|
+-----+
+-----+

root
 |-- title: string (nullable = true)

+--------------------+
|               title|
+--------------------+
|Mr. Beautiful (Up...|
|House of Ravens (...|
+--------------------+
only showing top 2 rows