2017-07-31 30 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") 

希望這有助於!

相關問題