We have been working on loads of things in Parquet-dotnet over the last few days and are increasingly happy with how it is progressing.
There are a few idiosyncrasies that we've found in the implementations you can find in the field. The Spark implementation is the defacto standard we're working to, which itself has a few differences from the core parquet standard. These come from incompatible or incomplete implementations elsewhere that Spark has to deal with, so we have to deal with them too.