7
import numpy as np 

df = spark.createDataFrame(
    [(1, 1, None), (1, 2, float(5)), (1, 3, np.nan), (1, 4, None), (1, 5, float(10)), (1, 6, float('nan')), (1, 6, float('nan'))], 
    ('session', "timestamp1", "id2")) 

Beklenen çıkışPyspark veri çerçevesindeki her sütun için Null ve Nan değerlerinin sayısı nasıl bulunur? Her sütun için boş nan deyince/ile

dataframe

Not: ben boş & değil nan için sadece denetler yığın taşması bulundu önceki sorular. Bu yüzden yeni bir soru oluşturdum.

Kıvılcım sütununda Boş değerlerin sayısını bulmak için kıvılcımda isnull() işlevini kullanabileceğimi biliyorum, ancak Spark veri çerçevesindeki Nan değerlerini nasıl bulabilirim?

+0

Her sütun için (her sütun için iki sütun) ayrı bir nan/Null değeri mi yoksa yalnızca sütunlarınızın kaç tane öğesinin sayı sayılmayacağını bilmek mi istiyorsunuz? – titiro89

+0

nan/Null değerinin ayrı sayısı çalışacaktır –

cevap

13

için isNullisnan ile here gösterilen yöntemi kullanmak yerine kullanılabilir:

from pyspark.sql.functions import isnan, when, count, col 

df.select([count(when(isnan(c), c)).alias(c) for c in df.columns]).show() 
+-------+----------+---+ 
|session|timestamp1|id2| 
+-------+----------+---+ 
|  0|   0| 3| 
+-------+----------+---+ 

veya

df.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in df.columns]).show() 
+-------+----------+---+ 
|session|timestamp1|id2| 
+-------+----------+---+ 
|  0|   0| 5| 
+-------+----------+---+ 
+0

Bu işe yaradı! Neden col (c) .isNull() ishal düzgün çalışırken (c) .isnan() hatası veriyor? Lütfen açıkla. –

+1

[isNull] (http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html?highlight=isnull#pyspark.sql.Column.isNull) vs [isnan] (http: //spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html?highlight=isnan#pyspark.sql.functions.isnan). Bu iki bağlantı size yardımcı olacaktır. "isnan()", pysparq.sql.function paketinin bir işlevidir, bu nedenle, işlevin bir argümanı olarak kullanmak istediğiniz sütunu ayarlamanız gerekir. "isNull()" pyspark.sql.Column paketine ait, bu yüzden yapmanız gereken şey "yourColumn.isNull()" – titiro89

2

için ckeck bir UDF oluşturabilir hem null ve NaN ve

filtre boolean değer iade
val isNaN = udf((value : Float) => { 
    if (value.equals(Float.NaN) || value == null) true else false }) 

val result = data.filter(isNaN(data("column2"))).count() 

Bu yardımcı olur umarız!