2017-03-01 5 views
0

Angenommen, ich habe einen Datenrahmen df, der mehrere Spalten hat column1, column2 .. und ich möchte die Anzahl der leeren Werte in jeder Spalte finden. Ein Weg, um es zu tun ist, von jeder Spalte wie gehen:Leere Werte im Datenrahmen zählen: scala spark

df.filter($"column1" !== "").count 
df.filter($"column2" !== "").count 
       . 
       . 

Aber gibt es eine Möglichkeit, es in einer Zeile zu tun?

Antwort

0

Ich würde vorschlagen, eine Art von Aggregation zu verwenden und einen neuen Datenrahmen bauen:

df.agg(
     sum(when($"column1" !== "", 1).otherwise(0)), 
     sum(when($"column2" !== "", 1).otherwise(0)) 
    ) 

EDIT: Wenn Sie eine Menge von Spalten haben, so etwas wie dies versucht:

val ncols=2 
val cols = (1 to ncols) 
    .map(i=> sum(when(col("column"+i)!=="",1).otherwise(0))) 

df.agg(cols.head,cols.tail:_*) 
+0

Während dieser Code Snippet kann die Frage lösen, [einschließlich einer Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich hilft, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. –

+0

danke für die Antwort, aber meine Hauptfrage ist, wie man vermeidet, 'Spalte1',' Spalte2' zu schreiben ... kann diesen Code verwenden, wenn ich 100 Spalten oder mehr habe. –

+0

@MpizosDimitris Überprüfen Sie meine aktualisierte Antwort –

Verwandte Themen