Ну, для начала, вы связаны с RDD или вы можете использовать DataSets / DataFrames?
С DataFrames вы можете использовать что-то вроде
df.write.format("json").
option("compression", "org.apache.hadoop.io.compress.GzipCodec").
save("...")
Однако есть несколько соображений,Сжатие - это хорошо, но если файлы, которые вы генерируете, очень большие, вы должны иметь в виду, что gzip не является форматом с разделением, то есть, если вы захотите позже обработать этот файл, он должен быть прочитан однимработник.Например, если ваш файл не разделяемый и имеет размер 1 ГБ, для его обработки потребуется T время, если бы он был разделяемым (например, LZO, Snappy или BZip2), его можно обработать в T / N, где N - количество разбиений(при условии блоков 128 МБ, это будет около 8).Вот почему Hadoop использует SequenceFiles (которые разделяются и используют gzip в одном блоке), и поэтому предпочтительным сжатым форматом при сохранении в S3 обычно является Parquet.Файлы паркета меньше, чем Gzip-файлы, и их можно разделить, то есть их содержимое может обрабатываться несколькими рабочими.Вы по-прежнему можете использовать текстовые файлы в формате gzip, но держите их в диапазоне ~ 100/200 Мбайт.
В конце концов, это действительно зависит от того, что вы планируете делать с данными в S3.
Будет ли это запрашиваться?В этом случае паркет является гораздо лучшим выбором в качестве формата.
Будет ли он считываться / копироваться в другие системы, которые не понимают паркет?Тогда сжатие GZIP в порядке.И он стабилен, вам не нужно беспокоиться об этом.Вы можете попробовать это самостоятельно, сохранить пример данных на S3, вы все равно можете открыть его с помощью любого инструмента gzip.