2017-02-27 29 views
0

我一直在使用sortByKey()來排序我的鍵值是一個元組。如果元組的大小小於9,那麼sortByKey函數可以正常工作。但在10號的sortByKey()方法失敗。 我們如何打印大小爲10或更大的元組的排序鍵。有超過10個元素的鍵的SortByKey()

工作舉例來說,如果我做的打印與大小9鍵RDD如下:

scala> freq_9s 
res31: org.apache.spark.rdd.RDD[((Int, Int, Int, Int, Int, Int, Int, Int, Int), Int)] 
scala> var frequent_movie_9s_count=freq_9s.count().toInt 

scala> printf(freq_9s.sortByKey().take(frequent_movie_9s_count).map({case (x,_) => s"$x" }).mkString(",")) 
(98,102,103,107,108,109,112,113,114),(98,102,106,107,108,109,112,113,114),(98,102,107,108,109,112,113,114,115),(99,100,102,103,104,107,108,110,114),(99,100,102,103,104,107,108,110,116),(99,100,102,103,104,107,108,114,116)) 

我想要做同樣的事情,但這次我RDD的樣子:

scala> freq_10s 
res31: org.apache.spark.rdd.RDD[((Int, Int, Int, Int, Int, Int, Int, Int, Int, Int), Int)] 

回答

2

OrderedRDDFunctions.sortByKey取決於隱含的Ordering[K],Scala提供的訂購僅限於Tuples直到Tuple9

對於較大的元組,您必須提供自己的隱式排序,例如使用內置的Orderings作爲模板。

implicit val ordTN: Ordering[(T1, T2, ..., TN) = ??? 

你也可以轉換到DataFrame並在需要時轉換回RDD

freq_9s.orderBy($"k").as[((Int, ..., Int), Int)].rdd