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