Pandas Python DataFrame kutubxonasi ko'pchilik tomonidan ishlatiladigan amaliy vosita bo'lsa-da, uning samarali bo'lmaganligi sababli foydalanuvchilar tarqalgan tizimlarga o'tishga majbur bo'lishadi. Bu maqolada Pandasning kamchiliklari va uning o'rniga keladigan alternativalar haqida gap kirishadi.
Pandasning muammolari
Pandas kutubxonasi ko'pchilik foydalanuvchilar uchun Exceldan keyingi qadam bo'lib, GB darajasidagi ma'lumotlar bilan ishlashda samarali bo'ladi. Biroq, 10 GB dan ortiq ma'lumotlar bilan ishlashda xotira muammolari, sekin hisoblash va murakkab API bilan bog'liq muammolar paydo bo'ladi. Bu holatda, foydalanuvchilar Spark, DataBricks, Snowflake yoki Dask kabi qimmatli vositalarga o'tishga majbur bo'lishadi.
Ammo, Pandasning samarali bo'lmaganligi sababli, foydalanuvchilar tarqalgan tizimlarga o'tishga majbur bo'lishadi. Bu holatda, 100 GB darajasidagi ma'lumotlar bilan ishlashda murakkab tizimlarni ishlatish zaruriy emas. Bu bo'shliqni Polars va DuckDB kabi zamonaviy, yuqori samarali, bir mashina vositalari to'ldirishi mumkin.
Big Data haqida
2024-yilda Amazon "Why TPC is not enough: An analysis of the Amazon Redshift fleet" nomli maqolani nashr etdi. Bu maqolada Amazonning o'zining tarqalgan analitik ma'lumotlar bazasi, Redshift, telemetriya ma'lumotlari va sanoat standartlari bilan solishtirildi. Maqolada, Amazonning mijozlari 94.68% hollarda 100 GB dan kam ma'lumotlar bilan ishlashadi.
Bu ma'lumotlar shuni ko'rsatadiki, ko'pchilik foydalanuvchilar "Big Data" emas, balki "Medium Data" muammolariga duch kelishadi. Shuning uchun, ular "Medium Data" vositalarini talab qiladilar.
Alternativalar
Pandasning o'rniga keladigan alternativalar sifatida DuckDB va Polarsni taklif qilamiz. Polars Rust asosidagi DataFrame kutubxonasi bo'lib, Pandasga o'xshaydi, ammo bir nechta muhim farqlarga ega. DuckDB esa in-memory analitik DB bo'lib, SQLite uchun analitik vosita hisoblanadi.
Ushbu vositalarning samaradorligini ko'rsatish uchun, 1 Billion Row Challenge testidan foydalanildi. Bu testda, 1 milliard qatorli CSV faylning min, mean va max qiymatlarini hisoblash vazifasi berildi. Eng tez implementatsiya 1.5 soniyada bajarildi.
10 machines * 8GB * 1 second = 80GB of data
Pandasning kodini ko'rib chiqsak, u har bir qatorni ketma-ket va ochiq tarzda o'qiydi, guruhlaydi va keyinchalik aggregatsiya hisoblaydi. Bu usul sekin va xotira talab qiladigan bo'lishi mumkin.
10^8 rows in a table * 1KB = 100GB
Yakun
Pandasning samarali bo'lmaganligi sababli, ko'pchilik foydalanuvchilar tarqalgan tizimlarga o'tishga majbur bo'lishadi. Ammo, bu tizimlar uchun asos bo'lgan vazifalar kam uchraydi. Shuning uchun, Polars va DuckDB kabi zamonaviy vositalarni ishlatish afzallikli bo'lishi mumkin.
def do_1brc_pandas(file_path: str):
df = (
pd.read_csv(file_path, sep=";", names=["station", "measurement"])
.groupby("station")
.agg({"measurement": ["min", "mean", "max"]})
.round(2)
)
Asl manba: eddie.codes