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

通过spark sql和scala删除文件中的逻辑副本和直接副本,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,考虑一个有两列的文本文件 a,b c,d a,b a,b d,c b,a e,f g,h 借助spark上的spark sql和scala,我必须删除逻辑and 直接复制品。 在上述数据中为a记录,b记录 直接副本是a,b 逻辑副本是b,a 我知道如何删除直接副本,但我不知道如何删除逻辑副本使用RDD可以通过元素比较来解决: val data = List( ("a", "b"), ("c", "d"), ("a", "b"), ("a", "b"), ("d", "c

考虑一个有两列的文本文件

a,b
c,d
a,b
a,b
d,c
b,a
e,f
g,h
借助spark上的spark sql和scala,我必须删除逻辑and 直接复制品。 在上述数据中为a记录,b记录 直接副本是a,b 逻辑副本是b,a
我知道如何删除直接副本,但我不知道如何删除逻辑副本

使用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)

您可以使用
RDDs

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

如果不是元素“a”,“b”,而是名称如果名称是字符串,那么代码必须正常工作,如果名称的大小写相同,该怎么办。否则,可以使用大写名称进行比较。
val inpurRdd=sc.textFile("H://spark//input.txt")
inputRdd.map(_.split(",").sorted.mkString(",")).map(x=>x->1).groupByKey.map(_._1)