Sie könnte so etwas wie diese versuchen, Spalten zu löschen, die null
Werte in ihm haben:
val df = Seq(
(Option(1),Option(11),None), (Option(2), None, Option(222))
).toDF("col1", "col2", "col3")
// +----+----+----+
// |col1|col2|col3|
// +----+----+----+
// | 1| 11|null|
// | 2|null| 222|
// +----+----+----+
val nullCount = udf[Int,Any](any => if (any == null) 1 else 0)
val columnNullCounts = df.select(
df.columns.map(c => nullCount(col(c)) as c):_*
).agg(
sum(df.columns(0)) as df.columns(0),
df.columns.slice(1, df.columns.length).map(c => sum(c) as c):_*
).collect.apply(0).toSeq.toArray
df.select(df.columns.zip(columnNullCounts).filter(v => v._2 == 0).map(c => col(c._1)):_*)
// +----+
// |col1|
// +----+
// | 1|
// | 2|
// +----+
Beachten Sie, dass alle großen Komplexität im obigen Code ist, weil ich es generic gemacht mit einem DataFrame
zu arbeiten. Es verwendet DataFrame.columns
, um seine Abfragen dynamisch zu erstellen. Wenn Sie nicht jede Spalte überprüfen möchten, können Sie sie in harte Codewerte umschreiben - aber das sollte ausreichen, um Sie in Schwung zu bringen.
bezogen https://spark.apache.org/docs/latest/ml-features.html – oluies
Können Sie sich erklären? Ihre Frage ist ein wenig mehrdeutig –
in Bezug auf (1) können Sie die DataFrameNAFunctions verwenden: http://spark.apache.org/docs/latest/api/scala/#org.apache.spark.sql.DataFrameNaFunctions zB df.na. drop() – eliasah