[FIXED] Zählen Sie die Anzahl der Nicht-Null-Werte in einem Spark DataFrame

Ausgabe

Ich habe einen Datenrahmen mit einigen Spalten, und bevor ich eine Analyse durchführe, möchte ich wissen, wie vollständig der Datenrahmen ist. Also möchte ich den Datenrahmen filtern und für jede Spalte die Anzahl der Nicht-Null-Werte zählen, die möglicherweise einen Datenrahmen zurückgeben.

Grundsätzlich versuche ich, das gleiche Ergebnis wie in dieser Frage zu erzielen , verwende jedoch Scala anstelle von Python.

Angenommen, Sie haben:

val row = Row("x", "y", "z")
val df = sc.parallelize(Seq(row(0, 4, 3), row(None, 3, 4), row(None, None, 5))).toDF()

Wie können Sie die Anzahl der Nicht-Null-Werte für jede Spalte zusammenfassen und einen Datenrahmen mit der gleichen Anzahl von Spalten und nur einer einzigen Zeile mit der Antwort zurückgeben?

Lösung

Obwohl ich die Antwort von Psidomen mag, interessiere ich mich oft mehr für den Bruchteil der Nullwerte, weil nur die Anzahl der Nicht-Nullwerte nicht viel aussagt …

Sie können Folgendes tun:

import org.apache.spark.sql.functions.{sum,when, count}

df.agg(
   (sum(when($"x".isNotNull,0).otherwise(1))/count("*")).as("x : fraction null"),
   (sum(when($"y".isNotNull,0).otherwise(1))/count("*")).as("y : fraction null"),
   (sum(when($"z".isNotNull,0).otherwise(1))/count("*")).as("z : fraction null")
 ).show()

BEARBEITEN: sum(when($"x".isNotNull,0).otherwise(1))kann auch einfach dadurch ersetzt werden count($"x"), dass nur Nicht-Null-Werte zählen. Da ich dies nicht offensichtlich finde, neige ich dazu, die sumeindeutigere Notation zu verwenden


Beantwortet von –
Raphael Roth


Antwort geprüft von –
Willingham (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like