<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ParquetKit Guides</title>
    <link>https://parquetkit.com/docs</link>
    <description>Practical guides on working with Parquet files — no Spark, no installs, everything in the browser.</description>
    <language>en</language>
    <item>
      <title>How to Append Rows to an Existing Parquet File</title>
      <link>https://parquetkit.com/docs/append-to-existing-parquet-file</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/append-to-existing-parquet-file</guid>
      <description>Parquet files are written once, so appending means adding a row group or a new file. fastparquet append=True, a DuckDB rewrite and the dataset-directory pattern.</description>
    </item>
    <item>
      <title>How to Check If a Parquet File Is Corrupted (No Install Needed)</title>
      <link>https://parquetkit.com/docs/check-if-parquet-file-is-corrupted</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/check-if-parquet-file-is-corrupted</guid>
      <description>Validate a Parquet file in your browser: check the footer and schema instantly, then scan every row group with one SQL query. No pyarrow, no Spark.</description>
    </item>
    <item>
      <title>Combine Multiple CSV Files into One Parquet File</title>
      <link>https://parquetkit.com/docs/combine-csv-files-into-one-parquet</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/combine-csv-files-into-one-parquet</guid>
      <description>Turn a folder of CSV exports into a single compressed Parquet file with one DuckDB command, handling schema drift — or do it entirely in your browser.</description>
    </item>
    <item>
      <title>How to Compare Two Parquet Files and See What Changed</title>
      <link>https://parquetkit.com/docs/compare-two-parquet-files</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/compare-two-parquet-files</guid>
      <description>Diff two Parquet files by key to find added, removed and changed rows — in your browser, with DuckDB SQL, or with a short pandas script.</description>
    </item>
    <item>
      <title>How to Convert an Excel File (XLSX) to Parquet</title>
      <link>https://parquetkit.com/docs/convert-excel-xlsx-to-parquet</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/convert-excel-xlsx-to-parquet</guid>
      <description>Get a spreadsheet into Parquet without pandas: export the sheet as CSV, convert it in your browser, and fix the types Excel mangled on the way out.</description>
    </item>
    <item>
      <title>Batch Convert a Folder of Parquet Files to CSV</title>
      <link>https://parquetkit.com/docs/convert-folder-of-parquet-files-to-csv</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/convert-folder-of-parquet-files-to-csv</guid>
      <description>Convert every Parquet file in a directory to its own CSV in one go — with a DuckDB shell loop, PowerShell, a pyarrow script, or a multi-file drop in the browser.</description>
    </item>
    <item>
      <title>Convert Parquet to CSV from the Command Line</title>
      <link>https://parquetkit.com/docs/convert-parquet-to-csv-command-line</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/convert-parquet-to-csv-command-line</guid>
      <description>Three ways to turn a Parquet file into CSV from a terminal — a DuckDB one-liner, Python with pandas or pyarrow — plus a no-install browser fallback.</description>
    </item>
    <item>
      <title>Convert Parquet to Excel (XLSX) with DuckDB or Python</title>
      <link>https://parquetkit.com/docs/convert-parquet-to-excel-xlsx</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/convert-parquet-to-excel-xlsx</guid>
      <description>Produce a real .xlsx workbook from a Parquet file — dates stay dates, types survive — with a DuckDB one-liner or pandas, plus fixes for the two errors you will hit.</description>
    </item>
    <item>
      <title>DuckDB Parquet Viewer Options Compared: CLI, UI, and Browser</title>
      <link>https://parquetkit.com/docs/duckdb-parquet-viewer</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/duckdb-parquet-viewer</guid>
      <description>DuckDB can view Parquet files through its CLI, its local web UI, Python, or a browser-based tool. Here is how each works and when to pick one.</description>
    </item>
    <item>
      <title>Fix fastparquet Install and Import Errors</title>
      <link>https://parquetkit.com/docs/fastparquet-install-and-import-errors</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/fastparquet-install-and-import-errors</guid>
      <description>pip install fastparquet fails to build a wheel, or importing it raises a numpy binary incompatibility. What each error means and how to get to a working reader.</description>
    </item>
    <item>
      <title>fastparquet ParquetFile: Read Columns, Filters and Row Groups</title>
      <link>https://parquetkit.com/docs/fastparquet-parquetfile-read-columns-filters</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/fastparquet-parquetfile-read-columns-filters</guid>
      <description>Use fastparquet's ParquetFile to inspect a file, load only the columns you need, prune row groups with filters and iterate in chunks to keep memory flat.</description>
    </item>
    <item>
      <title>fastparquet vs pyarrow: Which Python Parquet Engine to Use</title>
      <link>https://parquetkit.com/docs/fastparquet-vs-pyarrow</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/fastparquet-vs-pyarrow</guid>
      <description>fastparquet and pyarrow both read and write Parquet from pandas, but they differ on speed, type support and maintenance. Here is how to choose.</description>
    </item>
    <item>
      <title>fastparquet write(): Compression, Partitioning and Row Groups</title>
      <link>https://parquetkit.com/docs/fastparquet-write-options</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/fastparquet-write-options</guid>
      <description>Write Parquet with fastparquet that other tools read correctly: per-column compression, partition_on with hive layout, row group size, object_encoding and INT96.</description>
    </item>
    <item>
      <title>How to Find and Remove Duplicate Rows in a Parquet File</title>
      <link>https://parquetkit.com/docs/find-duplicate-rows-in-parquet</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/find-duplicate-rows-in-parquet</guid>
      <description>Count exact duplicates, find repeated business keys and keep only the newest row per key — with DuckDB SQL in your browser or a short pandas script.</description>
    </item>
    <item>
      <title>How to Flatten Nested Parquet Columns to CSV or JSON</title>
      <link>https://parquetkit.com/docs/flatten-nested-parquet-columns</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/flatten-nested-parquet-columns</guid>
      <description>Parquet struct and list columns become unusable text in CSV. Flatten them properly with DuckDB SQL, or keep the nesting by exporting JSON instead.</description>
    </item>
    <item>
      <title>Convert a Large Parquet File to CSV Without Running Out of Memory</title>
      <link>https://parquetkit.com/docs/large-parquet-to-csv-without-running-out-of-memory</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/large-parquet-to-csv-without-running-out-of-memory</guid>
      <description>pandas dies converting a multi-GB Parquet file to CSV? Stream it instead — DuckDB COPY, pyarrow batches or Polars sink_csv write the CSV without loading it all.</description>
    </item>
    <item>
      <title>How to Merge Multiple Parquet Files into One</title>
      <link>https://parquetkit.com/docs/merge-multiple-parquet-files</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/merge-multiple-parquet-files</guid>
      <description>Combine several Parquet files into a single dataset with DuckDB SQL in your browser — including files whose schemas don't quite match — or with pyarrow.</description>
    </item>
    <item>
      <title>How to Open a Parquet File Without Spark or Python</title>
      <link>https://parquetkit.com/docs/open-parquet-file-without-spark</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/open-parquet-file-without-spark</guid>
      <description>Five ways to open and inspect a Parquet file — from zero-install browser tools to DuckDB one-liners — and when each one makes sense.</description>
    </item>
    <item>
      <title>How to Open a Parquet File in Excel (Step by Step)</title>
      <link>https://parquetkit.com/docs/open-parquet-in-excel</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/open-parquet-in-excel</guid>
      <description>Excel cannot read Parquet natively. Convert the file to CSV in your browser — and trim oversized files with SQL first — to get it into a spreadsheet.</description>
    </item>
    <item>
      <title>Why pandas Reads Parquet Integer Columns as Float (and the Fix)</title>
      <link>https://parquetkit.com/docs/pandas-parquet-integer-column-becomes-float</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/pandas-parquet-integer-column-becomes-float</guid>
      <description>An int column with nulls comes back from pd.read_parquet as float64, and large IDs lose digits. Find whether the file or the reader is at fault, and fix it.</description>
    </item>
    <item>
      <title>Fix pandas read_parquet: Unable to Find a Usable Engine</title>
      <link>https://parquetkit.com/docs/pandas-read-parquet-no-engine-error</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/pandas-read-parquet-no-engine-error</guid>
      <description>pandas raises ImportError: Unable to find a usable engine when no Parquet reader is installed. What actually causes it, and how to fix it for good.</description>
    </item>
    <item>
      <title>PARQUET_COLUMN_DATA_TYPE_MISMATCH: Find Which File Drifted</title>
      <link>https://parquetkit.com/docs/parquet-column-data-type-mismatch</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-column-data-type-mismatch</guid>
      <description>Spark or Databricks fails reading a Parquet dataset when one file's column type changed. Here is how to find the drifted file and column, and fix it.</description>
    </item>
    <item>
      <title>Parquet Compression: Snappy vs Gzip vs Zstd, Which to Pick</title>
      <link>https://parquetkit.com/docs/parquet-compression-snappy-vs-gzip-vs-zstd</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-compression-snappy-vs-gzip-vs-zstd</guid>
      <description>Snappy, Gzip, and Zstd trade file size for CPU time differently. Benchmarks, defaults by engine, and how to check or change the codec in an existing Parquet file.</description>
    </item>
    <item>
      <title>Why Your Parquet Timestamps Are Wrong: The INT96 Problem</title>
      <link>https://parquetkit.com/docs/parquet-int96-timestamps</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-int96-timestamps</guid>
      <description>Timestamps shifted by hours, wrong by centuries, or rejected outright? Your Parquet file probably uses legacy INT96. What it is and how to deal with it.</description>
    </item>
    <item>
      <title>Parquet &quot;Magic Bytes Not Found&quot; — What It Means and How to Fix It</title>
      <link>https://parquetkit.com/docs/parquet-magic-bytes-not-found</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-magic-bytes-not-found</guid>
      <description>The PAR1 magic bytes error means your Parquet file is truncated or not Parquet at all. Here is how to diagnose it in seconds and where the file broke.</description>
    </item>
    <item>
      <title>View Parquet Row Group Statistics (Min, Max, Null Count)</title>
      <link>https://parquetkit.com/docs/parquet-row-group-statistics-min-max</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-row-group-statistics-min-max</guid>
      <description>Read the per-row-group min/max and null counts stored in a Parquet footer with DuckDB's parquet_metadata(), and use them to explain why a filter is fast or slow.</description>
    </item>
    <item>
      <title>Parquet to CSV: Control Nulls, Timestamps and Quoting</title>
      <link>https://parquetkit.com/docs/parquet-to-csv-null-and-timestamp-formatting</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-to-csv-null-and-timestamp-formatting</guid>
      <description>Your exported CSV has NaN, shifted timestamps or mangled accents. How to control null strings, date formats, delimiters and encoding when writing CSV.</description>
    </item>
    <item>
      <title>Load a Parquet File into a DuckDB or SQLite Database</title>
      <link>https://parquetkit.com/docs/parquet-to-duckdb-or-sqlite-database</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-to-duckdb-or-sqlite-database</guid>
      <description>Turn Parquet files into a queryable .duckdb or .sqlite database file — with the right commands, the type traps, and when to skip the import entirely.</description>
    </item>
    <item>
      <title>Parquet to JSON: Fix &quot;Object Is Not JSON Serializable&quot;</title>
      <link>https://parquetkit.com/docs/parquet-to-json-not-json-serializable</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-to-json-not-json-serializable</guid>
      <description>json.dumps fails on Timestamp, Decimal, bytes and int64 values read from Parquet. Why each type breaks, and three ways to get valid JSON out.</description>
    </item>
    <item>
      <title>Convert Parquet to JSONL for LLM Fine-Tuning</title>
      <link>https://parquetkit.com/docs/parquet-to-jsonl-for-llm-fine-tuning</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-to-jsonl-for-llm-fine-tuning</guid>
      <description>Fine-tuning APIs expect JSONL, but datasets ship as Parquet. Filter, reshape and export training data as JSONL — in the browser or with one DuckDB command.</description>
    </item>
    <item>
      <title>Convert Flat Parquet Rows to Nested JSON with DuckDB</title>
      <link>https://parquetkit.com/docs/parquet-to-nested-json</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-to-nested-json</guid>
      <description>Turn flat Parquet rows into nested JSON — orders with an items array, customer objects — using DuckDB's list() and struct syntax. Includes JSON array and JSONL output.</description>
    </item>
    <item>
      <title>Parquet vs CSV: Size, Speed and When to Use Each</title>
      <link>https://parquetkit.com/docs/parquet-vs-csv</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/parquet-vs-csv</guid>
      <description>A practical comparison of Parquet and CSV — file size, query speed, type safety and tool support — with concrete guidance on choosing.</description>
    </item>
    <item>
      <title>Print a Parquet File's Schema Without Installing Anything</title>
      <link>https://parquetkit.com/docs/print-parquet-schema-without-installing</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/print-parquet-schema-without-installing</guid>
      <description>See a Parquet file's columns, types and row count in seconds — in your browser, with no pyarrow, Spark or parquet-tools. Works for multi-GB files.</description>
    </item>
    <item>
      <title>Query Parquet Files on S3 Without Downloading Them</title>
      <link>https://parquetkit.com/docs/query-parquet-on-s3-without-downloading</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/query-parquet-on-s3-without-downloading</guid>
      <description>Read Parquet straight from S3, GCS or any HTTPS URL with DuckDB httpfs — credentials, globs, partition pruning, and how to keep the bytes you pay for down.</description>
    </item>
    <item>
      <title>Query Parquet Files with SQL — No Database Required</title>
      <link>https://parquetkit.com/docs/query-parquet-with-sql-in-browser</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/query-parquet-with-sql-in-browser</guid>
      <description>Run real SQL against local Parquet and CSV files using DuckDB in the browser: joins, aggregates and window functions with zero setup.</description>
    </item>
    <item>
      <title>Read Parquet Key-Value Metadata (pandas, Spark, created_by)</title>
      <link>https://parquetkit.com/docs/read-parquet-key-value-metadata</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/read-parquet-key-value-metadata</guid>
      <description>Every Parquet footer stores key-value metadata: the writer, the pandas index, Spark's schema, custom tags. Read it with DuckDB SQL or pyarrow, and write your own.</description>
    </item>
    <item>
      <title>How to Read a Partitioned Parquet Dataset Without Spark</title>
      <link>https://parquetkit.com/docs/read-partitioned-parquet-dataset</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/read-partitioned-parquet-dataset</guid>
      <description>Query a directory of Hive-partitioned Parquet files with DuckDB SQL, filter by partition columns, and understand how partition pruning works.</description>
    </item>
    <item>
      <title>How to Rename, Drop or Reorder Columns in a Parquet File</title>
      <link>https://parquetkit.com/docs/rename-columns-in-parquet-file</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/rename-columns-in-parquet-file</guid>
      <description>Parquet files can't be edited in place. Rename, drop, reorder or retype columns by rewriting the file with one DuckDB statement or a few lines of pyarrow.</description>
    </item>
    <item>
      <title>How to Split a Large Parquet File into Smaller Files</title>
      <link>https://parquetkit.com/docs/split-large-parquet-file</link>
      <guid isPermaLink="true">https://parquetkit.com/docs/split-large-parquet-file</guid>
      <description>Split an oversized Parquet file by target size, by row count, or by a column value — with DuckDB SQL, pyarrow, or in the browser with no install.</description>
    </item>
  </channel>
</rss>
