我一直在使用sortByKey()
来排序我的键值,这是一个元组。如果元组的大小小于9,那么sortByKey
函数可以正常工作。但是在大小为10时,sortByKey()
方法失败了。
我们如何打印排序大小为10或更大的元组。
如果我使用大小为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)]
答案 0 :(得分: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