Spark:删除重复的行并按字母排序

时间:2015-12-07 09:42:32

标签: apache-spark

我可以使用np.dot删除重复的行,例如: distinct()
scala> val file = sc.textFile("input.txt")
scala> val result = file.distinct()

scala> result.saveAsTextFile("output")看起来像:
input.txt
16408753Y, 1554250
16408753Y, 1554250
16408753Y, 1555250
16408755-, 0511252
16408755-, 0511252

......distinct()之后,我可以删除重复的行,结果如下:
result.saveAsTextFile("output")
16408753Y, 1555250
16408755-, 0511252
我在HDFS中获得了2个分区,例如......part-00000 如果我使用part-00001,我只会得到一个分区,例如distinct(1)

我的第一个问题是:
1. 如果我不使用part-00000,如何将2个分区合并为一个文件?

我也希望我的结果按字母排序,这是我的工作:
distinct(1)
scala> val pairs = result.map(x => (x.split(",\t")(0), x.split(",\t")(1)))
scala> val sortedpair = pairs.sortByKey()
我明白了:
scala> sortedpair.saveAsTextFile("output/sorting")
(16408753Y, 1555250)

我的第二个问题是:
2。我确实有排序结果,但在(16408755-, 0511252)时如何删除()?此外,我是否使用正确的方法,如saveAsTextFile()map(x => (x.split(",\t")(0), x.split(",\t")(1)))

感谢。

1 个答案:

答案 0 :(得分:0)

就第一个问题而言,没有办法,因为每个分区的结果都写入不同的文件。

第二个问题的答案是将其放在saveAsTextFile方法之前:

map(x => x._1+", "+x._2)