检查RDD中的字段是否包含唯一值

时间:2017-08-08 09:49:56

标签: scala apache-spark

Spark RDD包含两个字段F1和F2,并通过运行SQL查询来填充。

F1必须是唯一的,而F2没有该约束。实际上,F2和F1之间存在一对多的关系。一个F2值可以与几个F1值相关联,但不是相反。

使用Scala,最简单的函数编程结构用于对RDD检查从SQL返回的数据是否违反此约束。

由于

2 个答案:

答案 0 :(得分:2)

如果这是从sql查询填充的,那么这必须是一个数据帧,而不是你可以通过使用

来验证这一点。
df.select("order").distinct().count() == df.count()

如果您已转换为rdd,则可以使用@pphilantrovert建议

df.groupBy(_._1).count == df.count

注意:如果数据集很大,这是一项昂贵的任务

希望这有帮助!

答案 1 :(得分:1)

如果您打算使用RDD(而不是DataFrames),那么使用下面的代码段进行操作对您来说非常方便。让我们说你的RDD是inputRDD,首先将2个字段用作关键的第二个作为值:

inputRDD.countByKey.filter(_._2 > 1 )

如果没有重复,它应返回空Map()否则返回包含重复键的行(第一个字段)