Split JSONL by Field Value
One file per class, tenant, language or source. Name a field and every distinct value becomes its own .jsonl, packed into a zip you can download in one click. The manifest comes first — group names with their record counts, sorted by size — because seeing the distribution is usually half the reason you wanted to split.
Split
Read the manifest before you use the zip
The manifest is three tab-separated columns: record count, the value, and the file it becomes. It is sorted largest-first, which surfaces the two things that most often go wrong. A long tail of one-record groups means the field is not categorical — you have split on an id, and you now have ten thousand files. A single dominant group means the field is nearly constant and the split bought you nothing. Either way you know before downloading.
Values are compared as they appear, so EN and en are two groups. Tick
lowercase when that distinction is an accident of the source rather than real. Non-scalar values —
an object or array in the field — are grouped by their canonical JSON form, which works but usually means you
meant to point at something one level deeper.
What the zip contains
One .jsonl per group, stored uncompressed, with records in their original file order inside each
group. The names come from the values with unsafe characters replaced, so a value of
en-GB / formal becomes en-GB-formal.jsonl. Download always gives you the whole zip,
whichever view is on screen — the single-group view is for inspecting, not for exporting one file.
Splitting by a label field before training is the usual reason to be here, and it pairs with Train / val / test split: split by class first to check the balance, then split by ratio. If your classes are lopsided, that is worth knowing before the split, not after the model.
Privacy
Nothing is uploaded. The whole thing runs in this tab, in your own browser. That matters here more than on most tool sites — training data is usually the most sensitive file a team owns.
Frequently asked questions
How many groups is too many?
The zip is built in memory, so a few thousand small files is fine and tens of thousands is not. If the manifest shows a group per record, you have picked an identifier field — pick the categorical one instead, or bucket the values first with Value counts to see which fields are actually categorical.
Can I split by two fields?
Not directly. Combine them into one field first — Template render can build a composite value, or add one with Query — then split on that.
Is the record order preserved?
Yes, within each group. Records keep the relative order they had in the source file.
What if I want the groups counted but not split?
That's Value counts, which gives you the distribution with percentages and no files.