Scala Spark SQL:对于给定的数据帧分区,是否可以按预定义的顺序逐行处理?

Scala Spark SQL:对于给定的数据帧分区,是否可以按预定义的顺序逐行处理?,scala,apache-spark-sql,Scala,Apache Spark Sql,我希望根据列(SECURITY_ID)对数据帧(df)进行分区,然后运行df.foreachpartition(customfunction)。这很好用 在每个分区内,必须根据列(秩)对数据进行排序。这很好用 现在,根据顺序,我想为每个分区按顺序处理一行接一行。比如说- 基本数据帧: +-------------+----------+----------+------ ACCOUNT_NO|SECURITY_ID| QUANTITY| RANK| +-------------+-----

我希望根据列(SECURITY_ID)对数据帧(df)进行分区,然后运行df.foreachpartition(customfunction)。这很好用

在每个分区内,必须根据列(秩)对数据进行排序。这很好用

现在,根据顺序,我想为每个分区按顺序处理一行接一行。比如说-

基本数据帧:

+-------------+----------+----------+------
ACCOUNT_NO|SECURITY_ID| QUANTITY|    RANK|
+-------------+----------+----------+------
  32934789|      290X2|   -98763|       3|
  3S534789|      290X2|    45300|       2|
  3FA34789|      290X2|    12763|       1|
  00000019|      290X2|-10177400|       4|
  92115301|      35G71|     8003|       2|
  91615301|      35G71|    -2883|       1|
在分割和排序之后

+-------------+----------+----------+------
ACCOUNT_NO|SECURITY_ID| QUANTITY|    RANK|
+-------------+----------+----------+------
  3FA34789|      290X2|    12763|       1|  
  3S534789|      290X2|    45300|       2|
  32934789|      290X2|   -98763|       3|
  00000019|      290X2|-10177400|       4|



+-------------+----------+----------+------
ACCOUNT_NO|SECURITY_ID| QUANTITY|    RANK|
+-------------+----------+----------+------
  91615301|      35G71|    -2883|       1|
  92115301|      35G71|     8003|       2|

让我们考虑这个分区

+-------------+----------+----------+------
ACCOUNT_NO|SECURITY_ID| QUANTITY|    RANK|
+-------------+----------+----------+------
  3FA34789|      290X2|    12763|       1|  
  3S534789|      290X2|    45300|       2|
  32934789|      290X2|   -98763|       3|
  00000019|      290X2|-10177400|       4|
我需要根据排名以递增的顺序依次处理行

这在单节点机器上似乎很好。但我看到在多节点集群上运行时,处理变得混乱


如何确保顺序得到保证?

请尝试对安全ID分区的Datafame执行coalesce(1)和sort(cols:*)操作,以获得按指定列排序的新Datafame/Dataset,所有操作均按升序进行

df.coalesce(1).sort("RANK").foreach(row => process(row))

Thanks@hagarwal. 这有帮助。