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

时间:2017-02-04 00:53:22

标签: 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);

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

的内容
df.write.parquet("hdfs:///my_file", partitionBy=["created_year", "created_month"])

但我在Hadoop的普通Java中找不到与partitionBy等效的东西。

1 个答案:

答案 0 :(得分:1)

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

job.setNumReduceTasks(N);

或者通过系统属性:

-Dmapreduce.job.reduces=N

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

Parquet format