2017-07-31 32 views
0

我有一个Spark RDD,其条目我想以有组织的方式进行排序。假设条目是一个包含3个元素(name,phonenumber,timestamp)的元组。我想首先根据phonenumber的值对条目进行排序,然后根据timestamp的值对条目进行排序,同时尊重并不改变基于phonenumber完成的排序。 (所以timestamp只根据phonenumber排序重新排列)。有Spark功能来做到这一点?如何使用两个功能同时对RDD条目进行排序?

(我用的Spark 2.X使用Scala)

回答

2

为了做到基于在RDD多个元素的排序,你可以使用sortBy功能。请在Python中查找下面的一些示例代码。你也可以类似地用其他语言来实现。

tmp = [('a', 1), ('a', 2), ('1', 3), ('1', 4), ('2', 5)] 

sc.parallelize(tmp).sortBy(lambda x: (x[0], x[1]), False).collect() 

问候,

Neeraj

1

您可以使用sortBy功能RDD如下

val df = spark.sparkContext.parallelize(Seq(
    ("a","1", "2017-03-10"), 
    ("b","12", "2017-03-9"), 
    ("b","123", "2015-03-12"), 
    ("c","1234", "2015-03-15"), 
    ("c","12345", "2015-03-12") 
))//.toDF("name", "phonenumber", "timestamp") 

df.sortBy(x => (x._1, x._3)).foreach(println) 

输出:

(c,1234,2015-03-15) 
(c,12345,2015-03-12) 
(b,12,2017-03-9) 
(b,123,2015-03-12) 
(a,1,2017-03-10) 

如果你有toDF("name", "phonenumber", "timestamp") 然后,数据框,你可以简单地做

df.sort("name", "timestamp") 

希望这有助于!

相关问题