Apache spark pyspark选择具有更多匹配列字段的特定行
我有下面这样的示例表(我有100万这样的行),其中我需要根据下面的条件选择要新建dataframe的行Apache spark pyspark选择具有更多匹配列字段的特定行,apache-spark,pyspark,pyspark-sql,Apache Spark,Pyspark,Pyspark Sql,我有下面这样的示例表(我有100万这样的行),其中我需要根据下面的条件选择要新建dataframe的行 我必须选择参加过更多课程的前1000名学生 与其他学生相比,前1000名学生上1、2、3、4班的次数更多 因此,在我的示例中,我需要将student123和678的所有行存储到其他数据帧中 我找不到正确的逻辑 以下是您问题的解决方案,请让我知道这对您是否有帮助 import pyspark.sql.functions as F from pyspark.sql import Window a
以下是您问题的解决方案,请让我知道这对您是否有帮助
import pyspark.sql.functions as F
from pyspark.sql import Window
attended_more_classes = df.filter(
F.col("check_in") == "y"
).groupby(
"id"
).agg(
F.countDistinct(F.col("class")).alias("class_count")
)
win = Window.partitionBy("id").orderBy(F.col("class_count").desc())
attended_more_classes = attended_more_classes.withColumn(
"rank",
F.rank().over(win)
).withColumn(
"attended_more_class",
F.when(
F.col("rank")<=1000,
F.lit("Y")
)
)
# result of first part
attended_more_classes.show()
# answer start for second question
win2 = Window.partitionBy("id", "class").orderBy(F.col("class_count").desc())
filtered_students = df.filter(F.col("class").isin(1,2,3,4)).select("id").distinct()
aggregated_data2 = df.filter(
F.col("check_in") == "y"
).groupby(
"id",
"class"
).agg(
F.count(F.col("check_in")).alias("class_count")
).withColumn(
"max_class",
F.first(F.col("class")).over(win)
)
attend_more_class2 = aggregated_data2.join(
filtered_students,
on = "id",
how = "inner"
)
attend_more_class23 = aggregated_data2.filter(
F.col("max_class").isin(1,2,3,4)
).withColumn(
"rank",
F.rank().over(win2)
).withColumn(
"attended_more_class",
F.when(
F.col("rank")<=1000,
F.lit("Y")
)
)
# answer of second part
attend_more_class23.show()
导入pyspark.sql.F函数
从pyspark.sql导入窗口
有人参加的课程=df.filter(
F.col(“签入”)=“y”
).群比(
“id”
)阿格先生(
F.countDistinct(F.col(“类”))。别名(“类计数”)
)
win=Window.partitionBy(“id”).orderBy(F.col(“class_count”).desc())
有人参加的课程=有人参加的课程。withColumn(
“等级”,
F.排名()超过(获胜)
).withColumn(
“参加了更多的课程”,
F.什么时候(
F.上校(“军衔”)