2016-09-16 4 views
0

sortByKeyなどの関数を呼び出すことができるコレクションのデータ型を理解できない。私はListMapを持っています(私はsortByKeyを呼び出すために要素を順番に格納するデータ構造が必要です)。リストマップの内容は、キーとしての最初のn番号と、それぞれの値としての1です。リストマップの代わりに何を使用すればよいですか?sparkでOrderedRDD関数を使用する

val l = (1 to 1000).toList 
val d = ListMap(l.map(s=> s -> 1):_*) 
val rdd = sc.parallelize(Seq(d)) 
rdd.collect() 
val sorted = rdd.sortByKey() 
sorted.collect() 

答えて

0

ListMapは必要ありません。 、

val rdd: RDD[(Int, Int)] = sc.parallelize((1 to 1000).map(k => (k -> 1)).toSeq) 

rdd.sortByKey().collect() 

また、あなたは現在無料で入手Orderingを、必要があります。必要なのはあなたのケースでは、我々はRDD[(Int, Int)]を持っているRDD[(K, V)]の形で、キーと値の根底にあるタプルを持ってRDDです暗黙のうちに、タイプIntのプリミティブに対してです。 Spark programming guideから

+0

ListMapを使用しています。ソート機能への入力が既にソートされているので、キーがソートされていることを確認したいのです。このrddがソート関数に渡されたときに、このrddが順序付けされていることを確認する方法を教えてください。 – user1745995

+0

@userなぜソートされたものを並べ替えるのですか?私が従うかわからない –

+0

シャッフルの読み込みとシャッフル書き込みが必要なため、データがネットワーク上を移動する必要があります。しかし、私は実際のソートを行う時間を費やしたくありません(実際には、私の最終データがソートされていない場合でも気にしません)。私が理解しているところでは、sparkはソートされたデータに対してO(n)ランタイムを与えるtim sortを使用するので、ソートしようとしているデータがソートされていることを確認したい。 – user1745995

0

sortByKey([昇順]、[numTasks])

A戻り Kが実装注文(K、V)対のデータセットで呼び出さ昇順にキーでソートされた(K、V)ペアのデータセット。ブール昇順引数で指定されているように降順で並べ替えられます。

キーが注文できる場所はPairRDDですので、他の回答を参考にしてください。

1

要件は非常に簡単です:

  • あなたはRDD[(K, V)]を必要としています。
  • 与えられた範囲内に存在するKにはimplicitOrderingがなければなりません。

あなたが作成するRDDには1つの要素しかないので、実際にはソートするものはないので、あなたの例は実際には意味がありません。おそらく、あなたは次のようなものを望んでいたでしょう:

sc.range(1, 1001).map((_, 1)).sortByKey() 
+0

私はそれを試して、それは動作します。ありがとう!コードスニペットのどの部分が1つの要素になっていますか?私はキーが既にソートされていることを確認して、並べ替えのアルゴリズムがO(n)の結果がrddのようなマップを順番に格納しているようにしたい。 – user1745995

+0

'Seq(d)'。あなたは 'd.toSeq'で置き換えることができますが、それはそれほど意味があります。 – zero323

関連する問題