2017-02-27 12 views
0

タプルであるキー値をソートするのにsortByKey()を使用しています。タプルのサイズが9未満の場合、sortByKey関数は正常に機能します。しかし、サイズ10ではsortByKey()メソッドが失敗します。 サイズが10以上のタプルであるソートされたキーをどのように印刷するのですか?10個以上の要素を持つキーのSortByKey()

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サイズ9のキーでRDDのために、次のように私は、印刷を行う場合などの作業

暗黙的にOrdering[K]に依存し、ScalaはTuplesまでの注文をTuple9まで提供しています。

タプルが大きい場合は、例えばOrderingsをテンプレートとして使用して、暗黙の順序を指定する必要があります。

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

またDataFrameに変換し、必要なときにRDDに戻って変換することができます。

freq_9s.orderBy($"k").as[((Int, ..., Int), Int)].rdd 
関連する問題