У меня есть DataFrame, созданный из объединения трех других фреймов данных, для которых мне нужно сделать много операторов суммирования.Я обнаружил, что функция withcolumn () может быть моим решением, но когда я сравниваю столбец с символом, я получаю два совершенно разных числа, когда использую либо .contains (), либо «==».
Приведенный ниже код показывает, как используются оба. Вот код с .contains:
test_data.withColumn('NewCol', F.when((test_data.col1 == 'str') & ((test_data.col2.contains('X')) | (test_data.col2.contains('Y'))) ,1).otherwise(0)) \
.groupBy('KEY') \
.agg(F.sum('NewCol').alias('NewCol))
Итоговый счетчик составляет 127470 строк> 0
А вот код скомпаратор:
test_data.withColumn('NewCol', F.when((test_data.col1 == 'str') & ((test_data.col2 == 'X') | (test_data.col2 == 'Y')) ,1).otherwise(0)) \
.groupBy('KEY') \
.agg(F.sum('NewCol').alias('NewCol))
, и итоговое число составляет 531645 строк> 0.
Как видно, число строк, имеющих 1, намного больше при использовании компаратора по сравнению с.содержит().Фильтрует ли .contains () перед сравнением или что-то еще вызывает дико отличающиеся числа?