通过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)