Pyspark - Заполните. Изменяет положение. При исходе условия - PullRequest
0 голосов
/ 11 ноября 2019

Извиняюсь за очень общий вопрос:

У меня есть фрейм данных pyspark, и я применяю к нему условия fill.na и when следующим образом:

df2 = df.withColumn('A', F.when( (F.col('B') != 'qqq') & (F.col('C) != 'vvv') ,1).otherwise(0)).na.fill('').groupby('X').sum("A").toPandas()

Если я бегу счетчик для конкретного значения X, я получаю счет, как это:

df2.loc[df2['X'] == '2018-12-10'] 
# count value is 5000

однако, если я помещаю fill.na часть кода, в самом начале, я получаюдругой результат:

df2 = df.na.fill('').withColumn('A', F.when( (F.col('B') != 'qqq') & (F.col('C) != 'vvv') ,1).otherwise(0)).groupby('X').sum("A").toPandas()

df2.loc[df2['X'] == '2018-12-10'] 
# count value is 170000

Разобравшись немного больше, я обнаружил, что в этом втором случае, когда условия игнорируются, поэтому я получаю гораздо большее количество записей

1016 *. Может кто-нибудь сказать мне, что может быть причиной этого? Есть ли у нее с тем, как искра строит свою ленивую оценку набора данных? 1018 * Спасибо.

1 Ответ

1 голос
/ 12 ноября 2019

При первом подходе, когда ваши столбцы B и C равны null, столбец A станет 0 и, следовательно, ваша сумма будет низкой. С другой стороны, во втором подходе, когда вы впервые замените null значения пустой строкой, столбец A станет 1, и ваша итоговая сумма будет больше.

...