Apache spark 使用数据帧进行聚合

Apache spark 使用数据帧进行聚合,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我是新手。需要关于使用dataframe在Spark中实现逻辑的帮助。 假设我有一个带有以下数据的数据帧df1 DF1: 我希望使用dataframe(不使用spark sql)以以下格式获得所需的输出。基本上,我希望在productid上执行group by,并希望选择事务id的最大值和该事务id的desc 结果: txn-id,productid,desc 1,'AA','ADESC' 4,'BB','ZDESC' 5,'CC','YDESC' 你能帮我解释一下逻辑吗 谢谢, Sumit在

我是新手。需要关于使用dataframe在Spark中实现逻辑的帮助。 假设我有一个带有以下数据的数据帧df1

DF1:

我希望使用dataframe(不使用spark sql)以以下格式获得所需的输出。基本上,我希望在productid上执行group by,并希望选择事务id的最大值和该事务id的desc

结果:

txn-id,productid,desc
1,'AA','ADESC'
4,'BB','ZDESC'
5,'CC','YDESC'
你能帮我解释一下逻辑吗

谢谢,
Sumit

productidcol上使用带分区的窗口

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

df1.select(col("*"), row_number.over(
  Window.partitionBy("productid").orderBy(col("txn-id").desc)
).as("rnum")).filter(col("rnum") === 1).drop("rnum")
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

df1.select(col("*"), row_number.over(
  Window.partitionBy("productid").orderBy(col("txn-id").desc)
).as("rnum")).filter(col("rnum") === 1).drop("rnum")