Pyspark データフレームの列を None 値でフィルタリングする 質問する

Pyspark データフレームの列を None 値でフィルタリングする 質問する

None行の値として次のものを持つ PySpark データフレームをフィルタリングしようとしています:

df.select('dt_mvmt').distinct().collect()

[Row(dt_mvmt=u'2016-03-27'),
 Row(dt_mvmt=u'2016-03-28'),
 Row(dt_mvmt=u'2016-03-29'),
 Row(dt_mvmt=None),
 Row(dt_mvmt=u'2016-03-30'),
 Row(dt_mvmt=u'2016-03-31')]

文字列値で正しくフィルタリングできます。

df[df.dt_mvmt == '2016-03-31']
# some results here

しかし、これは失敗します:

df[df.dt_mvmt == None].count()
0
df[df.dt_mvmt != None].count()
0

しかし、各カテゴリには確かに値があります。何が起こっているのでしょうか?

ベストアンサー1

Column.isNull/ を使用できますColumn.isNotNull:

df.where(col("dt_mvmt").isNull())

df.where(col("dt_mvmt").isNotNull())

単に値を削除したい場合は、引数とともにNULL使用できます。na.dropsubset

df.na.drop(subset=["dt_mvmt"])

との等価性に基づく比較は、NULLSQL では未定義であるため機能しません。NULLそのため、別の値と比較しようとすると、次の結果が返されますNULL

sqlContext.sql("SELECT NULL = NULL").show()
## +-------------+
## |(NULL = NULL)|
## +-------------+
## |         null|
## +-------------+


sqlContext.sql("SELECT NULL != NULL").show()
## +-------------------+
## |(NOT (NULL = NULL))|
## +-------------------+
## |               null|
## +-------------------+

値を比較する唯一の有効なメソッドは/NULLであり、これは/メソッド呼び出しと同等です。ISIS NOTisNullisNotNull

おすすめ記事