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

Apache spark Spark:删除重复的行并按字母表排序,apache-spark,Apache Spark,我可以使用distinct()删除重复的行,例如: scala>val file=sc.textFile(“input.txt”) scala>val result=file.distinct() scala>result.saveAsTextFile(“输出”) input.txt看起来像: 16408753Y,1554250 16408753Y,1554250 16408753Y,1555250 16408755-,0511252 16408755-,0511252 在distinct()

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

scala>val result=file.distinct()

scala>result.saveAsTextFile(“输出”)


input.txt
看起来像:
16408753Y,1554250

16408753Y,1554250

16408753Y,1555250

16408755-,0511252

16408755-,0511252

distinct()
result.saveAsTextFile(“输出”)
之后,我可以删除重复的行,结果如下:
16408753Y,1555250

16408755-,0511252

……

我在HDFS中得到了两个分区,比如
part-00000
part-00001

如果我使用
distinct(1)
,我只会得到一个分区,比如
part-00000


我的第一个问题是:
1。如果我不使用
distinct(1)
,如何将两个分区合并到一个文件中?

我还希望我的结果按字母表排序,下面是我要做的:
scala>val pairs=result.map(x=>(x.split(“,\t”)(0),x.split(“,\t”)(1))

scala>val sortedpair=pairs.sortByKey()

scala>sortedpair.saveAsTextFile(“输出/排序”)

我得到:
(16408753Y,1555250)

(16408755-,0511252)


我的第二个问题是:
2.我确实有排序结果,但是当
saveAsTextFile()
时如何删除
?此外,我是否使用了正确的方法,例如
map(x=>(x.split(“,\t”)(0)、x.split(“,\t”)(1))
sortBykey()



谢谢。

关于第一个问题,没有办法,因为每个分区的结果都会写入不同的文件

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

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

你能发布你的代码吗?至少你的尝试…(?)谢谢,但我还是会得到
。对于我的第一个问题,如果这是不可能的,那么我想以更一般的形式问:无论我做了什么计算,我如何才能将所有分区合并为一个?您是否做了
sortedpair.map(x=>x._1+,“+x._2).saveAsTextFile(“输出/排序”)
?我不明白你为什么要合并它们:如果你需要对它们进行进一步处理,你只需要将它们设置为处理结果存储在其中的整个目录的输入…如果
distinct(1)
是获取单个文件(分区)的正确方法,这是否意味着Spark只在一个节点中运行作业,不是while集群?
sortedpair.map(x=>x._1+,“+x._2)。saveAsTextFile(“输出/排序”)
是正确的,我的错,谢谢。是的,所有数据都放在一个节点上。使用Spark parallelism获得完全排序的结果的方法是定义一个
Partitioner
,它确保一个分区中的所有数据在其他分区中的所有数据之前/之后。最后,您将拥有多个文件,并一个接一个地读取它们,从而得到排序结果。。