Pull to refresh

Comments 4

Вопрос не подкреплялся подходящим датасетом, поэтому я нашел массив данных на портале Kaggle. В нем 541909 записей, 25900 уникальных чеков и 4070 разных кодов товаров. Вы можете взять любой датасет

И Вы не нашли ничего лучше, чем последовать за авторами вопроса и точно так же оставить читателя без массива данных для воспроизведения написанного?

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

Ничего не могу сказать ни про Питон, ни про Спарк. Но вот SQL-вариант... он ужасен. И неудивительно, что он проиграл (справедливости ради следует отметить - не так уж и много) варианту на питоне. Хотя какие-то вшивые полмиллиона записей, без какой-либо обработки - да при правильно построенном запросе должно было уделать питоновский вариант приблизительно на порядок (да-да, не в два раза, и не в три - на порядок), даже при отсутствии подходящих индексов.

В Spark переходя на python вы попадаете как минимум на сериализацию/десериализацию данных. По сути вы получили скорость работы локального Python скрипта + время поднятия/запуска spark job.

Spark вообще c local[*] имеет смысл запускать только для целей отладки. Spark это не локальная утилита для расчетов. Он про распределенные вычисления на кластерах и большие массивы данных. Так же там нужно озаботиться правильным шардированием данных по нодам, чтобы соблюдать data locality и избегать shuffle.

Это как взять камаз для доставки спичечного коробка по высокоскоростной магистрали. Да, легковушка довезет быстрее. Вот только если вам этих спичек нужно будет привезти тонну, производительность камаза даже с его 80км/ч будет гораздо выше.

А тут еще и udf, с которыми в pyspark плохо. Не верится что-то в такие измерения от слова совсем.

В части SQL полная ахинея.

SELECT sc1, sc2, Count(*) as kol FROM

(

SELECT a.invoiceno, a.stockcode as sc1, b.stockcode  as SC2

FROM sales a JOIN sales b ON a.invoiceno=b.invoiceno AND a.stockcode < b.stockcode 

GROUP BY a.invoiceno, a.stockcode, b.stockcode

) AA

GROUP BY sc1, sc2

ORDER BY kol DESC

При соответствующих индексах на такой выборке будет около секунды

Sign up to leave a comment.

Articles