Polars

Polars

Polarsarrow-up-right is a fast DataFrame library written in Rust with Arrow as its foundation.

πŸ’‘ Learn more about how to get the dataset URLs in the List Parquet filesarrow-up-right guide.

Let’s start by grabbing the URLs to the train split of the blog_authorship_corpusarrow-up-right dataset from Datasets Server:

Copied

r = requests.get("https://datasets-server.boincai.com/parquet?dataset=blog_authorship_corpus")
j = r.json()
urls = [f['url'] for f in j['parquet_files'] if f['split'] == 'train']
urls
['https://boincai.com/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/train/0000.parquet',
 'https://boincai.com/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/train/0001.parquet']

To read from a single Parquet file, use the read_parquetarrow-up-right function to read it into a DataFrame and then execute your query:

Copied

import polars as pl

df = (
    pl.read_parquet("https://boincai.com/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/train/0000.parquet")
    .groupby("horoscope")
    .agg(
        [
            pl.count(),
            pl.col("text").str.n_chars().mean().alias("avg_blog_length")
        ]
    )
    .sort("avg_blog_length", descending=True)
    .limit(5)
)
print(df)
shape: (5, 3)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ horoscope ┆ count ┆ avg_blog_length β”‚
β”‚ ---       ┆ ---   ┆ ---             β”‚
β”‚ str       ┆ u32   ┆ f64             β”‚
β•žβ•β•β•β•β•β•β•β•β•β•β•β•ͺ═══════β•ͺ═════════════════║
β”‚ Aquarius  ┆ 34062 ┆ 1129.218836     β”‚
β”‚ Cancer    ┆ 41509 ┆ 1098.366812     β”‚
β”‚ Capricorn ┆ 33961 ┆ 1073.2002       β”‚
β”‚ Libra     ┆ 40302 ┆ 1072.071833     β”‚
β”‚ Leo       ┆ 40587 ┆ 1064.053687     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

To read multiple Parquet files - for example, if the dataset is sharded - you’ll need to use the concatarrow-up-right function to concatenate the files into a single DataFrame:

Copied

Lazy API

Polars offers a lazy APIarrow-up-right that is more performant and memory-efficient for large Parquet files. The LazyFrame API keeps track of what you want to do, and it’ll only execute the entire query when you’re ready. This way, the lazy API doesn’t load everything into RAM beforehand, and it allows you to work with datasets larger than your available RAM.

To lazily read a Parquet file, use the scan_parquetarrow-up-right function instead. Then, execute the entire query with the collectarrow-up-right function:

Copied

Last updated