Лично я бы отбросил столбцы с 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"))
или coalesce
:
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,[],[])|
+---+--------+-------------------+
Обходной путь - поместить handler.proceed () и handler.cancel () в if else
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
if (error.toString().equals("SSLError")) {
handler.cancel();
} else {
handler.proceed();
}
}
Удачи!