微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在使用 Foundry Data Expectations 的同时使用过滤后的数据框过滤一列并验证另一列?

如何解决如何在使用 Foundry Data Expectations 的同时使用过滤后的数据框过滤一列并验证另一列?

我正在使用数据期望来验证特定列是否满足某些必需条件。我能够编写用于检查列是否唯一的代码。但是我无法编写代码来过滤列,然后为该结果数据框检查另一列是否唯一。 例如,请找出以下两个场景,在这两个场景中,我们都需要检查 Department_id = "CSE" 是否具有唯一的 roll_no :

  1. 场景 1:
reg_no department_id roll_no
1 CSE 1
2 ECE 1
3 ECE 2
4 CSE 2
5 1
6 EEE 1
7 CSE 2

在这种情况下,它应该失败,因为 CSE 有重复的 roll_no :

  1. 场景 2:
reg_no department_id roll_no
1 CSE 8
2 ECE 2
3 ECE 5
4 CSE 4
5 3
6 EEE 2
7 CSE 1

在这种情况下,作业应该通过,因为 deparment_id = "CSE" 具有唯一的 roll_no 值。 请让我知道如何满足上述 2 种情况,其中应首先过滤数据框,然后使用代工厂数据期望检查列是否唯一。

解决方法

您可以简单地构建两个数据框并检查它们是否具有相同的大小:

  • 对于第一个,只需过滤 var paddingHeight = 40; var rowHeight = dataTable.getNumberOfRows() * 15; var options = { height:chartHeight,} 并选择 department_id='CSE'
  • 对于第二个过滤器 roll_no,选择 department_id='CSE' 并调用 roll_no

如果它们的大小相同,则您的数据框在 Department_id 方面是唯一的

,

IIUC - 有两种方法可以解决这个问题 -

一个只会告诉重复值的通用代码 -

df = spark.createDataFrame([(1,"CSE",1),(2,"ECE",(3,2),(4,(5,"ME",(6,"EEE",(7,2)],["reg_no","department_id","roll_no"])
df.show()
df \
    .groupby(['department_id','roll_no']) \
    .count() \
    .where('count > 1') \
    .sort('count',ascending=False) \
    .show()

这将帮助您识别 depertment_id 是否唯一

_w  = W.partitionBy("department_id").orderBy("department_id")

df = df.withColumn("roll_no_list",F.collect_list("roll_no").over(_w)).withColumn("roll_no_set",F.collect_set("roll_no").over(_w))
df = df.withColumn("cond_col",F.when(F.size(F.col("roll_no_list")) == F.size(F.col("roll_no_set")),"Unique").otherwise("Not Unique"))
df.show()
+------+-------------+-------+------------+-----------+----------+
|reg_no|department_id|roll_no|roll_no_list|roll_no_set|  cond_col|
+------+-------------+-------+------------+-----------+----------+
|     1|          CSE|      1|   [1,2,2]|     [1,2]|Not Unique|
|     4|          CSE|      2|   [1,2]|Not Unique|
|     7|          CSE|      2|   [1,2]|Not Unique|
|     2|          ECE|      1|      [1,2]|    Unique|
|     3|          ECE|      2|      [1,2]|    Unique|
|     6|          EEE|      1|         [1]|        [1]|    Unique|
|     5|           ME|      1|         [1]|        [1]|    Unique|
+------+-------------+-------+------------+-----------+----------+

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。