根据某些过滤条件比较两个数据帧的值,然后计数

时间:2019-05-27 10:04:28

标签: apache-spark dataframe pyspark apache-spark-sql pyspark-sql

我是新来的火花。我正在编写一个pyspark代码,其中有两个数据帧,例如:

DATAFRAME-1:

NAME BATCH MARKS 
A     1     44
B     15    50
C     45    99
D     2     18

DATAFRAME-2:

NAME  MARKS 
A       36
B       100
C       23
D       67

我希望将输出作为这两个数据框之间的比较,以便可以将计数存储为变量。

例如

improvedStudents = 1(因为D属于第1-15批次,并且他的得分有所提高)

badPerformance = 2(A,B表现不佳,因为它们属于第1-15批之间,并且其得分比以前要小)

neutralPerformance = 1(C,因为即使他的分数下降了,他也属于我们不希望考虑的第45个批次)

这只是我要解决的复杂问题中的一个示例。

谢谢

1 个答案:

答案 0 :(得分:0)

如果数据如您的示例中所示,为什么不加入它们并为您拥有的每个指标创建新列:

val df = df1.withColumnRenamed("MARKS", "PRE_MARKS")
.join(df2.withColumnRenamed("MARKS", "POST_MARKS"), Seq("NAME"))
.withColumn("Evaluation", 
    when(col("BATCH") > 15, lit("neutral"))
    .when(col("PRE_MARKS") gt col("POST_MARKS"), lit("bad")) 
    .when(col("POST_MARKS") gt col("PRE_MARKS"), lit("improved")) 
    .otherwise(lit("neutral"))
    .groupBy("Evaluation")
    .count