If you are using pyspark you can do something like the following:
df.coalesce(1).write.option("compression","gzip").csv("path")
Note the coalesce will reduce the number of partitions so that it is saved as a single file. In addition to gzip you can use "bzip2", "lz4", "snappy", and "deflate".
If you are not using pyspark and are using pandas then you can use the pandas compression option which can be found here.