Hi Dan,
Thanks for the setup description  and the bug report. 22k features is not something we tried in TF-DF before, but it should be interesting and I’ll keep you in touch there.
The raw dataset takes 50k x 22k x 4bytes/values = 4.4GB of memory (assuming you have numerical features, and with the IN_NODE strategy). So this aspect should be fine. From the top of my head, the likely culprit is the tensorflow graph: TF-DF will instantiate one TF Operation for each of the features. Since TF Ops have a non negligible cost, this could be the issue. Using Yggdrasil DF 3 directly is an easy way to try.