过滤文本文件中的唯一值

时间:2018-03-09 12:47:21

标签: scala apache-spark apache-spark-sql

如何从文本文件中查找和过滤唯一值。

我尝试如下,它不起作用。

 val spark = SparkSession.builder().master("local").appName("distinct").getOrCreate()
var data = spark.sparkContext.textFile("text/file/opath")
val uniqueval = data.map { rec => (rec.split(",")(3).distinct) }
var fils = data.filter(line => line.split(",")(3).equals(uniqueval)).map(x => (x)).foreach { println }

示例数据:

ID | Name
1    john
1    john
2    david
3    peter
4    steve

必需输出:

1    john
2    david
3    peter
4    steve

3 个答案:

答案 0 :(得分:1)

核心scala是否被允许?

scala> val text = List ("single" , "double", "mono", "double") 
text: List[String] = List(single, double, mono, double)

scala> val u = text.distinct
u: List[String] = List(single, double, mono)

scala> val d = text.diff(u)
d: List[String] = List(double)

scala> val s = u.diff (d) 
s: List[String] = List(single, mono)

答案 1 :(得分:1)

你几乎是对的。必须在RDD上调用.distinct()。 我将语句3替换为:

val uniqueval = data.distinct().map...

这假设类似的记录在文本文件中具有相同的行。

答案 2 :(得分:1)

您的代码可以是:

sparkContext.textFile("sample-data.txt").distinct()
            .saveAsTextFile("sample-data-dist.txt");

distinct方法可以执行您想要的操作。