В чем разница между использованием компаратора '==' и использованием .contains ('val') с искрой? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть 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 () перед сравнением или что-то еще вызывает дико отличающиеся числа?

1 Ответ

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

== соответствует всей строке .contains () поиск в строке в поисках строки Пример: «вчера» == «день» является ложным но «вчера». Содержит («день») - правда

...