
daft.datasets.lerobot reads LeRobot v3 datasets — episode metadata, frame-level sensor data, and camera video — as a lazy DataFrame with joins and video-frame decoding handled for youdaft.Hdf5File gives you typed accessors (hdf5_keys, hdf5_metadata, hdf5_attrs) for inspecting HDF5 files without hand-rolling h5py traversal codeprompt(..., provider="transformers") runs open-weight instruction-tuned models locally through Hugging Face pipeline("text-generation") — no API key, no separate servicedaft.datasets.common_crawl can now read from Hugging Face buckets, a credential-free alternative to the AWS S3 mirror for anyone outside us-east-1
daft.datasets.droid gives you a DataFrame API over the DROID robotics dataset — 76k demonstration episodes, camera feeds, and natural language annotationsDataFrame.to_torch_dataloader connects Daft directly to PyTorch training loops without an intermediate dataset abstractionignore_corrupt_files skips bad files instead of aborting your entire job, with structured observability so nothing gets silently dropped
try_cast() brings safe type conversion with null fallbacks instead of runtime errors
array_reader API with coalesced range GETs and two-phase predicate pushdown — up to 17.4x faster remote reads, 3.82x remote aggregate, 1.31x local aggregateLimitCounterActor that slices morsels in place, so top-N over large shuffles no longer OOMs materializing the full shuffle outputuuid(version="v7") generates UUIDv7 values with a timestamp prefix, giving chronologically ordered IDs for event tracking and time-series datajson_array_length, json_object_keys, and json_tuple add Spark SQL-compatible JSON inspection for nested payloads
strategy="forward" to match each left row against the earliest later right row, completing bidirectional matchingdaft.IdempotentCommit snapshot markers (v0.7.11) and now honors table-level write.target-file-size-bytes and write.parquet.row-group-size-bytes (v0.7.12)
join_asof horizontally using range-repartitioning plus a carryover system for correctness across partition boundaries — linear scaling to 100+ partitions with no accuracy losssimhash() and hamming_distance() bring near-duplicate document detection to Daft, 1000x faster than embedding-based approaches for deduplicationserde feature, so UUID columns round-trip through Arrow IPC as 128-bit binaries instead of falling back to string serializationmake_date, make_timestamp, make_timestamp_ltz, last_day, next_day, factorial, hypot, e, pi
date_add, date_sub, date_diff, date_from_unix_date, timestamp_seconds, timestamp_millis, timestamp_micros, from_unixtime — follow Spark naming for ETL migrationsvideo_frames() decodes video already loaded in a File column without re-reading from storage, emitting per-frame structs with frame_index, frame_time, is_key_frame, and image bytesDataType.Uuid backed by FixedSizeBinary(16), so PostgreSQL and Trino UUID columns read natively instead of needing a CAST(id AS VARCHAR) workaround
group_ids arrays — 10% off total ClickBench time and a 4x improvement on connected components workloads (250s → 70s)image_hash() ships eight perceptual hashing algorithms implemented in Rust, bit-exact with the Python imagehash library and 5-25x faster than an equivalent Python UDFdf.skip_existing() filters rows already present in the output path for idempotent ETL and RAG re-runs on the distributed Ray runner
df.shuffle(seed=...) randomly rearranges rows as a first-class plan node for ML data prep, and a standalone random_int() expression ships with itcoalesce now short-circuits per the SQL spec, so expensive expressions in later positions stop evaluating once an earlier value is non-nullconcat_ws concatenates columns with a separator and skips nulls instead of propagating them, unlike concat
daft.read_paimon and df.write_paimon complete native support for all four major lake formats — Iceberg, Delta Lake, Hudi, and Apache Paimon — behind one DataFrame APIColumn::Scalar variant holds a single literal plus a logical length instead of broadcasting into a full-length array, with lazy materialization keeping the public API unchangeddaft.read_kafka reads Kafka topics as a bounded batch source with earliest/latest, timestamp, or per-partition offset bounds
daft.load_extension() plus a stable C ABI lets any language that compiles to a C-compatible shared library extend the query engine, with data crossing the boundary zero-copy via the Arrow C Data InterfaceDataFrame.write_sql() writes back to PostgreSQL, SQLite, or any SQLAlchemy target with parallel worker-side writes and an explicit dtype parameter for target schema control
node.type attributes, split duration columns in the metrics DataFrame, and a dashboard CLI split into start/stop subcommands
df.metrics now works for Flotilla runs — a distributed query returns a RecordBatch of operator timings, row counts, and bytes processed on the result DataFrame, same API as a local runOTEL_EXPORTER_OTLP_* environment variables routes query metrics to Prometheus, an OTEL collector, or ClickStack without code changespip install daft --pre --extra-index-url https://nightly.daft.ai gets you whatever landed on main yesterday