2015-08-26 11 views
7

W poniższym przykładzie df.a == 1 predykat zwraca poprawny wynik ale df.a == None zwraca 0 gdy powinna powrócić 1.Jak uzyskać wiersze z DF, które zawierają wartość None w pyspark (iskry)

l = [[1], [1], [2], [2], [None]] 
df = sc.parallelize(l).toDF(['a']) 
df # DataFrame[a: bigint] 
df.collect() # [Row(a=1), Row(a=1), Row(a=2), Row(a=2), Row(a=None)] 
df.where(df.a == 1).count() # 2L 
df.where(df.a == None).count() # 0L 

Korzystanie iskra 1.3.1

Odpowiedz

16

Column.isNull można użyć metody:

df.where(df.a.isNull()).count() 

na marginesie to zachowanie jest tym, co można oczekiwać od normal SQL query. Ponieważ NULL oznacza "brakujące informacje i nie dotyczy informacji" [1] nie ma sensu pytać, czy coś jest równa NULL. Po prostu bądź IS lub IS NOT brakuje \

Scala API zapewnia specjalne Null-safe równości <=> operatora jest więc możliwe, aby zrobić coś takiego:.

df.where($"a" <=> lit(null)) 

ale nie wygląda jak dobry pomysł Jeśli mnie pytasz.

1. Wikipedia, Null (SQL)

+0

Świetna odpowiedź chłopaki. Rozumiem, że tutaj pytanie jest specyficzne dla pyspark, ale pomyślałem, że nie zaszkodzi również objaśnienie, jak podobną logikę można rozwiązać w Scali oraz df.filter (df.col ("a"). IsNull() lub df.col ("a"). isNaN()) .count() Mam nadzieję, że było to pomocne – Pramit

Powiązane problemy