сравнить значения двух информационных кадров на основе определенных условий фильтрации, а затем получить количество - PullRequest
0 голосов
/ 27 мая 2019

Я новичок в искре. Я пишу код 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

Я хочу, чтобы мои выходные данные сравнивались между этими двумя фреймами данных, чтобы я мог хранить значения в качестве моих переменных.

например,

ImproveStudents = 1 (так как D принадлежит серии 1-15 и улучшил свой счет)

badPerformance = 2 (A, B показали плохие результаты, поскольку они принадлежат к серии 1-15, а их оценки меньше, чем раньше)

нейтральный результат = 1 (C, потому что, даже если его оценки снизились, он принадлежит к 45-й партии, которую мы не хотим рассматривать)

Это всего лишь пример из сложной проблемы, которую я пытаюсь решить.

Спасибо

1 Ответ

0 голосов
/ 27 мая 2019

Если данные такие же, как в вашем примере, почему бы вам просто не присоединиться к ним и не создать новые столбцы для каждой имеющейся у вас метрики:

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
...