我有一个数据帧,必须使用PySpark进行验证。其中一列只能接受0到100之间的值,而我的另一列只接受1到5之间的值。验证这些信息的正确方法是什么?理想情况下,如果程序出现错误,则程序应该崩溃。
我想我会简单地过滤违反条件的行,然后断言没有:
df = spark.createDataFrame([
Row(a=1, b=1),
Row(a=6, b=101),
])
rows_with_issues =
df.where(~F.col('a').between(1,5) | ~F.col('b').between(0,100))
n_rows_with_issues = rows_with_issues.count()
if n_rows_with_issues > 0:
raise Exception(
f'The {n_rows_with_issues} rows violate the data constraints. Showing five rows:n'
'n'.join([str(r) for r in rows_with_issues.take(5)])
)
然而,对于较大的数据集来说,这样的测试是昂贵的,因为所有的数据都必须进行处理。