目标:读取文件数据,去重,排序输出
数据去重的最终目标是让原始数据中出现次数超过一次的数据在输出文件中只出现一次
实验文件
file1.txt
2012-3-1 a
2012-3-2 b
2012-3-3 c
2012-3-4 d
2012-3-5 a
2012-3-6 b
2012-3-7 c
2012-3-3 c
file2.txt
2012-3-1 b
2012-3-2 a
2012-3-3 b
2012-3-4 d
2012-3-5 a
2012-3-6 c
2012-3-7 d
2012-3-3 c
代码实现:
/*
* 数据去重问题
* */
import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession
object distinct {
Logger.getLogger("org").setLevel(Level.WARN)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName("distinct").master("local[*]")
.config("spark.testing.memory", "2147480000")
.getOrCreate()
val inputFile = "D:\\bigdata\\learn01\\file*.txt"
val rdd = spark.sparkContext.textFile(inputFile)
val result = rdd.filter(_.trim().length()>0 ).map( line=>(line.trim,"") ).groupByKey()
.sortByKey()
// .keys //获取所有键
.map(_._1)//获取第一个值
.collect()
result.foreach(println(_))
spark.stop()
}
}
实验结果:
2012-3-1 a
2012-3-1 b
2012-3-2 a
2012-3-2 b
2012-3-3 b
2012-3-3 c
2012-3-4 d
2012-3-5 a
2012-3-6 b
2012-3-6 c
2012-3-7 c
2012-3-7 d