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
,它确保一个分区中的所有数据在其他分区中的所有数据之前/之后。最后,您将拥有多个文件,并一个接一个地读取它们,从而得到排序结果。。