<p>这是pyspark中的一个解决方案。在</p>
<p>首先定义一个按<code>my_column</code>划分的<a href="http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.Window" rel="nofollow noreferrer">^{<cd1>}</a>,并按<code>int_column</code>排序。我们将在这个分区上使用<a href="http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.functions.row_number" rel="nofollow noreferrer">^{<cd4>}</a>定义一个排序。在</p>
<pre class="lang-python prettyprint-override"><code>from pyspark.sql import Window
import pyspark.sql.functions as f
w = Window.partitionBy("my_column").orderBy("int_column")
df.withColumn("order", f.row_number().over(w)).sort("order").show()
#+ -+ -+ + -+
#|some_id|my_column|int_column|order|
#+ -+ -+ + -+
#| xx4| id_1| 1| 1|
#| xx2| id_2| 1| 1|
#| xx2| id_3| 3| 1|
#| xx1| id_2| 4| 2|
#| xx1| id_1| 3| 2|
#| xx1| id_3| 5| 2|
#| xx3| id_2| 8| 3|
#| xx3| id_3| 9| 3|
#| xx3| id_1| 4| 3|
#| xx2| id_1| 6| 4|
#+ -+ -+ + -+
</code></pre>
<p>请注意,<code>(xx4, 1)</code>位于按<code>order</code>排序后的第一行中,如您所述。在</p>
<p>现在可以按<code>order</code>和<code>pivot</code>对<code>my_column</code>上的数据帧进行分组。这需要一个聚合函数,所以我将使用<a href="http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.functions.first" rel="nofollow noreferrer">^{<cd10>}</a>,因为我假设每个<code>order</code>只有一个<code>(some_id, int_column)</code>对。然后简单地按<code>order</code>排序并删除该列以获得所需的输出:</p>
^{pr2}$