如何在Parquet中输出多个s3文件

use*_*220 14 hadoop parquet

写下镶木地板数据可以通过以下方式完成.但是,如果我尝试写入的不仅仅是一个文件,而且想要输出到多个s3文件,以便读取单个列不会读取所有s3数据,如何才能完成?

    AvroParquetWriter<GenericRecord> writer =
            new AvroParquetWriter<GenericRecord>(file, schema);

    GenericData.Record record = new GenericRecordBuilder(schema)
                .set("name", "myname")
                .set("favorite_number", i)
                .set("favorite_color", "mystring").build();
    writer.write(record);
Run Code Online (Sandbox Code Playgroud)

例如,如果我想按列值进行分区,以便所有具有红色的favorite_color的数据都放在一个文件中,而那些带有蓝色的数据放在另一个文件中,以最大限度地降低某些查询的成本.在Hadoop上下文中应该有类似的东西.所有我能找到的东西都提到Spark使用类似的东西

df.write.parquet("hdfs:///my_file", partitionBy=["created_year", "created_month"])
Run Code Online (Sandbox Code Playgroud)

但我在使用Hadoop的普通Java中找不到与partitionBy相同的东西.

and*_*esp 1

在典型的 Map-Reduce 应用程序中,输出文件的数量将与作业中的减少数量相同。因此,如果您想要多个输出文件,请相应地设置减少的数量:

job.setNumReduceTasks(N);

或者通过系统属性:

-Dmapreduce.job.reduces=N

我认为 Parquet 格式的每个文件不可能有一列。Parquet 文件的内部结构最初是按行组分割的,然后只有这些行组才按列分割。

实木复合地板格式