What Jose said.
If you cannot use delta or do not want to:
the use of coalesce and repartition/partitioning is the way to define the file size.
There is no one ideal file size. It all depends on the use case, available cluster size, data flow downstream etc.
What you do want to avoid is a lot of small files (think only a few megabytes or kilobytes).
But there is nothing wrong with a single file of 2 MB.
That being said: delta lake makes this exercise way easier.