2017-05-21 10 views
0

Ich habe eine komplizierte Datenstruktur, die I verwaltet abzuflachen und die Ausgabe hat die folgende Struktur:Filtering PySpark Datenrahmen Reihen

'name' 
    ------ 
    ['a','b','c'] 
    [] 
    [null] 
    null 
    ['f'] 
    [null,'d'] 

Die gewünschte Leistung nach dem obigen Datenrahmen Filterung:

'name' 
------ 
['a','b','c'] 
['f'] 

Ich weiß, dass Zeilen, die nur 'null' haben, mit df.where(col('name').isNotNull()) gefiltert werden können. Ich versuchte mit

filtered = udf(lambda row: int(not all(x is None for x in row)),IntegerType()) 

aber das produzierte nicht die Ergebnisse, auf die ich gehofft hatte. Wie filtere ich Zeilen, die leer sind oder mindestens eine Null enthalten?

Antwort

0

die folgenden gefilterten Funktion kann als Ihr UDF

filtered = lambda x: not bool([y for y in x if y is None]) if x else False 

>>> filtered(['a','b','c']) 
True 
>>> filtered([]) 
False 
>>> filtered([None]) 
False 
>>> filtered(None) 
False 
>>> filtered(['f']) 
True 
>>> filtered([None,'d']) 
False 
+0

Werke für [] und null verwendet werden, aber für [null] funktioniert nicht. – user201411

+0

[null] meinst du [keine]? –

+0

Die Ausgabe von meinem Python-Skript ist null, nicht keine – user201411

Verwandte Themen