Spark write.avro 创建单独的 avro 文件
Spark write.avro creates individual avro files
我写了一个 spark-submit 作业,它读取 json 文档的 in 目录,使用数据帧对它们进行一些处理,然后写入 out 目录。但是,出于某种原因,当我使用 df.save 或 df.write 方法时,它会创建单独的 avro、parquet 或 json 文件。
事实上,我什至使用了 saveAsTable 方法,它对 hive 仓库中的 parquet.gz 个文件做了同样的事情。
在我看来,这是低效的并且否定了容器文件格式的使用。这是正确的吗?或者这是正常行为,而我所看到的只是 HDFS 中的抽象?
如果我是对的,这很糟糕,我该如何将来自多个文件的数据框写入单个文件?
正如 @zero323 所说,由于有很多工人(支持容错),它的正常行为。
我建议您使用类似这样的方式将所有记录写入具有 avro 通用记录的 parquet 或 avro 文件
dataframe.write().mode(SaveMode.Append).
format(FILE_FORMAT).partitionBy("parameter1", "parameter2").save(path);
但它不会写入单个文件,但会将类似类型的 Avro 通用记录分组到一个文件(可能数量较少的中型文件)文件
我写了一个 spark-submit 作业,它读取 json 文档的 in 目录,使用数据帧对它们进行一些处理,然后写入 out 目录。但是,出于某种原因,当我使用 df.save 或 df.write 方法时,它会创建单独的 avro、parquet 或 json 文件。
事实上,我什至使用了 saveAsTable 方法,它对 hive 仓库中的 parquet.gz 个文件做了同样的事情。
在我看来,这是低效的并且否定了容器文件格式的使用。这是正确的吗?或者这是正常行为,而我所看到的只是 HDFS 中的抽象?
如果我是对的,这很糟糕,我该如何将来自多个文件的数据框写入单个文件?
正如 @zero323 所说,由于有很多工人(支持容错),它的正常行为。
我建议您使用类似这样的方式将所有记录写入具有 avro 通用记录的 parquet 或 avro 文件
dataframe.write().mode(SaveMode.Append).
format(FILE_FORMAT).partitionBy("parameter1", "parameter2").save(path);
但它不会写入单个文件,但会将类似类型的 Avro 通用记录分组到一个文件(可能数量较少的中型文件)文件