パーティション データの SQL Row_Number に相当する Spark RDD
SQL では、 row_number() はパーティション データセット内の行の連続番号を生成します。この機能は、Spark RDD では直接使用できません。ただし、同様の機能を実現するための回避策があります。
RDD のパーティション化
グループ内の行番号を生成するには、パーティション化が重要です。あなたの場合、並べ替える前に key_value (K) で RDD を分割する必要があります。更新されたコードを考えてみましょう:
val temp2 = temp1 .map(x => (x._1, (x._2, x._3, x._4))) .sortBy(a => (a._1, -a._2._2, -a._2._3)) .zipWithIndex .map(a => (a._1._1, a._1._2._1, a._1._2._2, a._1._2._3, a._2 + 1))
sortBy を (a._1, -a._2._2, -a._2._3) に適用すると、key_value に基づいて並べ替えられ、次に、col2 の降順になります。最後に、SQL の row_number() 動作を模倣して、col3 を降順します。
行の追加Numbers
パーティション化して並べ替えた後、zipWithIndex を使用して行番号を追加できます:
val rowNums = temp2.map(a => (a._1, a._2, a._3, a._4, a._5)).cache()
注: 応答で提供される DataFrame 実装は、 DataFrame 用のソリューションですが、RDD 用ではありません。
以上がパーティション化されたデータの Spark RDD を使用して SQL の row_number() 機能をレプリケートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。