【发布时间】:2021-09-20 15:01:00
【问题描述】:
我想知道是否有解决这个问题的巧妙方法
这是我未过滤的数据框deltas,它是源数据集和目标数据集之间full join 的结果:
我想删除“未知”和“未指定”值(即第 5 行和第 6 行),所以我使用波浪号来删除这些行:
deltas = deltas.filter(~deltas['tgt_property_owner_type'].isin(['Unknown', 'Not Specified']))
但是,使用波浪号运行 display(deltas) 不会返回任何结果。我想这是因为这些行是列的null,它也排除了那些行,因为它不能确定它们不是“未知”或“未指定”。但是,上述的正数版本(即没有波浪号)只返回第 5 行和第 6 行,而不是 nulls。
这是我的临时解决方案,可行:
deltas = deltas.withColumn("IsMissingKValue",\
when(deltas.tgt_property_owner_type.isin(['Unknown', 'Not Specified']),True) \
.otherwise(False))
deltas = deltas.filter(deltas['IsMissingKValue'] == False)
是否有一种聪明的方法可以让波浪号否定在评估期间忽略nulls?我知道一些变通方法,例如用空白字符串替换 nulls 或将其运行到临时视图中并使用 SQL 对其进行排序,但想知道是否可以使用更纯的 python 语法。
【问题讨论】:
标签: python pyspark databricks