Поляры Python: количество строк ленивого кадра не равно wc -lPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Поляры Python: количество строк ленивого кадра не равно wc -l

Сообщение Anonymous »

Я экспериментировал с полярами, и одна из ключевых функций, которая меня заинтересовала, — это операции больше, чем ОЗУ.
Я загрузил несколько файлов в поиграйте ЗДЕСЬ. На сайте: Первая строка каждого файла — заголовок; 1 строка соответствует 1 записи.. ВНИМАНИЕ! общий объем загрузки довольно велик (~1,3 ГБ)! Этот эксперимент проводился на сервере AWS (

Код: Выделить всё

t2.medium
, 2 процессора, 4 ГБ)

Код: Выделить всё

wget https://s3.amazonaws.com/amazon-reviews-pds/tsv/amazon_reviews_us_Shoes_v1_00.tsv.gz \
https://s3.amazonaws.com/amazon-reviews-pds/tsv/amazon_reviews_us_Office_Products_v1_00.tsv.gz \
https://s3.amazonaws.com/amazon-reviews-pds/tsv/amazon_reviews_us_Software_v1_00.tsv.gz \
https://s3.amazonaws.com/amazon-reviews-pds/tsv/amazon_reviews_us_Personal_Care_Appliances_v1_00.tsv  .gz \
https://s3.amazonaws.com/amazon-reviews-pds/tsv/amazon_reviews_us_Watches_v1_00.tsv.gz

gunzip *
Вот результаты wc -l

Код: Выделить всё

drwxrwxr-x 3 ubuntu ubuntu       4096 Jun  2 12:44 ../
-rw-rw-r-- 1 ubuntu ubuntu 1243069057 Nov 25  2017 amazon_reviews_us_Office_Products_v1_00.tsv
-rw-rw-r-- 1 ubuntu ubuntu   44891575 Nov 25  2017 amazon_reviews_us_Personal_Care_Appliances_v1_00.tsv
-rw-rw-r-- 1 ubuntu ubuntu 1570176560 Nov 25  2017 amazon_reviews_us_Shoes_v1_00.tsv
-rw-rw-r-- 1 ubuntu ubuntu  249565371 Nov 25  2017 amazon_reviews_us_Software_v1_00.tsv
-rw-rw-r-- 1 ubuntu ubuntu  412542975 Nov 25  2017 amazon_reviews_us_Watches_v1_00.tsv

$ find . -type f -exec cat {} + | wc -l
8398139

$ find . -name '*.tsv' | xargs wc -l
2642435 ./amazon_reviews_us_Office_Products_v1_00.tsv
341932 ./amazon_reviews_us_Software_v1_00.tsv
85982 ./amazon_reviews_us_Personal_Care_Appliances_v1_00.tsv
4366917 ./amazon_reviews_us_Shoes_v1_00.tsv
960873 ./amazon_reviews_us_Watches_v1_00.tsv
8398139 total
Теперь, если я подсчитаю строки, используя полярные поля, используя нашу новую причудливую ленивую функцию:

Код: Выделить всё

import polars as pl

csvfile = "~/data/amazon/*.tsv"
(
pl.scan_csv(csvfile, separator = '\t')
.select(
pl.len()
)
.collect()
)
shape: (1, 1)
┌─────────┐
│ len     │
│ ---     │
│ u32     │
╞═════════╡
│ 4186305 │
└─────────┘
Ух ты, это БОЛЬШАЯ разница между wc -l и полярами. Это странно... возможно, это проблема с данными. Давайте сосредоточимся только на интересующем столбце:

Код: Выделить всё

csvfile = "~/data/amazon/*.tsv"
(
...     pl.scan_csv(csvfile, separator = '\t')
...     .select(
...         pl.col("product_category").count()
...         )
...     .collect()
...  )
shape: (1, 1)
┌──────────────────┐
│ product_category │
│ ---              │
│ u32              │
╞══════════════════╡
│ 7126095          │
└──────────────────┘
И с .collect(streaming = True):

Код: Выделить всё

shape: (1, 1)
┌──────────────────┐
│ product_category │
│ ---              │
│ u32              │
╞══════════════════╡
│ 7125569          │
└──────────────────┘
Окей, разница все равно около 1 миллиона? Давайте сделаем это снизу вверх:

Код: Выделить всё

csvfile = "~/data/amazon/*.tsv"
(
pl.scan_csv(csvfile, separator = '\t')
.group_by("product_category")
.agg(pl.col("product_category").count().alias("counts"))
.collect(streaming = True)
.filter(pl.col('counts') > 100)
.sort(pl.col("counts"), descending = True)
.select(
pl.col('counts').sum()
)
)
shape: (1, 1)
┌─────────┐
│ counts  │
│ ---     │
│ u32     │
╞═════════╡
│ 7125553 │
└─────────┘
Близко, хотя это снова другой счетчик...
Еще несколько проверок с использованием R:

Код: Выделить всё

library(vroom)
library(purrr)
library(glue)
library(logger)
amazon 

Подробнее здесь: [url]https://stackoverflow.com/questions/76391153/python-polars-lazy-frame-row-count-not-equal-wc-l[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»