在 spark 中,过滤 dataframe 对象数据的某个列为 null 值(即空值)的行数据可以使用 filter 函数或 where 函数(where 底层本质上还是调用 filter)。
解决方案
dataframe 对象 filter 函数或 where 函数的参数里写类似 sql 的条件表达式,python 代码示例如下:
from pyspark.sql import SparkSession
spark_session = SparkSession.builder.appName('knowledgedict-dataframe').getOrCreate()
# 通过 python 的 None 构造 id 字段为 null 的数据
df = spark_session.createDataFrame(
schema=['id', 'impression', 'click', 'ctr'],
data=[(1, 100, 5, 0.05), (None, 10, 3, 0.3), (3, 50, 5, 0.1)]
)
print(df)
df.show()
df = df.filter('id is not null')
df.show()
打印信息如下:
DataFrame[id: bigint, impression: bigint, click: bigint, ctr: double] +----+----------+-----+----+ | id|impression|click| ctr| +----+----------+-----+----+ | 1| 100| 5|0.05| |null| 10| 3| 0.3| | 3| 50| 5| 0.1| +----+----------+-----+----+ +---+----------+-----+----+ | id|impression|click| ctr| +---+----------+-----+----+ | 1| 100| 5|0.05| | 3| 50| 5| 0.1| +---+----------+-----+----+