考虑具有两列的文本文件
a,b
c,d
a,b
a,b
d,c
b,a
e,f
g,h
借助spark-sql和scala on spark,我必须删除逻辑和直接重复项。在上面的数据中记录a,b直接重复是a,b逻辑副本是b,我知道如何删除直接重复,但我不知道如何删除逻辑副本
你可以使用RDDs
在下面做
val inpurRdd=sc.textFile("H://spark//input.txt")
inputRdd.map(_.split(",").sorted.mkString(",")).map(x=>x->1).groupByKey.map(_._1)
使用RDD可以通过元素比较来解决:
val data = List(
("a", "b"),
("c", "d"),
("a", "b"),
("a", "b"),
("d", "c"),
("b", "a"),
("e", "f"),
("g", "h"))
val original = sparkContext.parallelize(data)
val converted = original.map(v => if (v._1 < v._2) (v._1, v._2) else (v._2, v._1))
println("-- converted -- ")
converted.foreach(println)
println("-- result --")
converted.distinct().foreach(println)
输出是:
-- converted --
(c,d)
(a,b)
(a,b)
(c,d)
(e,f)
(a,b)
(g,h)
(a,b)
-- result --
(e,f)
(a,b)
(g,h)
(c,d)