Не уверен, правильно ли я понял вопрос, но если вы хотите выполнить операцию со строками на основе любого столбца, вы можете сделать это, используя функции dataframe. Пример:
from pyspark.sql import SparkSession
import pyspark.sql.functions as f
from pyspark.sql import Window
sc = SparkSession.builder.appName("example").\
config("spark.driver.memory","1g").\
config("spark.executor.cores",2).\
config("spark.max.cores",4).getOrCreate()
df1 = sc.read.format("csv").option("header","true").load("test.csv")
w = Window.partitionBy("student_id")
df2 = df1.groupBy("student_id").agg(f.sum(df1["marks"]).alias("total"))
df3 = df1.withColumn("max_marks_inanysub",f.max(df1["marks"]).over(w))
df3 = df3.filter(df3["marks"] == df3["max_marks_inanysub"])
df1.show()
df3.show()
образец данных
student_id, предмет, оценки 1, математика, 3 1, наука, 6 2, математика, 4 2, наука, 7
вывод
+ ---------- + ------- + ----- + | student_id | subject | mark |+ ---------- + ------- + ----- + |1 |математика |3 ||1 | наука |6 ||2 |математика |4 ||2 | наука |7 |+ ---------- + ------- + ----- +
+ ---------- + ------- + ----- + ------------------ + | student_id | предмет | оценки | max_marks_inanysub |+ ---------- + ------- + ----- + ------------------ + |1 | наука |6 |6 ||2 | наука |7 |7 |+ ---------- + ------- + ----- + ------------------ +