通过spark sql和scala删除文件中的逻辑和直接副本

问题描述 投票:-2回答:2

考虑具有两列的文本文件

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,我知道如何删除直接重复,但我不知道如何删除逻辑副本

scala apache-spark apache-spark-sql
2个回答
1
投票

你可以使用RDDs在下面做

val inpurRdd=sc.textFile("H://spark//input.txt")
inputRdd.map(_.split(",").sorted.mkString(",")).map(x=>x->1).groupByKey.map(_._1)

0
投票

使用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)
© www.soinside.com 2019 - 2024. All rights reserved.