查找如果两列之间存在精确映射

时间:2017-05-31 11:58:03

标签: scala apache-spark

我是Spark初学者,我正在尝试决定是否可以从数据框中抛出一列。

假设我有这个数据框:

   a   b
----------
   g   x
   f   y
   g   x
   f   y

我想知道列'a'和'b'之间存在精确映射,因此我可以抛出其中一个。

但是,如果数据框是这样的:

   a   b
----------
   g   x
   f   x
   g   x
   f   y

两列之间没有映射,因此必须保留两列。

您对如何解决此问题有任何暗示吗? 谢谢

2 个答案:

答案 0 :(得分:3)

假设df是有问题的数据框。 假设您只想知道b是否“冗余”:

df.select('a).distinct().count() == df.select('a, 'b).distinct().count()

如果这种情况属实,您可以“抛弃”b,因为始终有一个唯一的a标识该值。

答案 1 :(得分:0)

简单dropDuplicates api应该处理您的问题

val dataframe = Seq(("g","x"),
  ("f","y"),
  ("g","x"),
  ("g","y"),
  ("f","y")).toDF("a", "b")

dataframe.dropDuplicates("a", "b").show(false)