gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:10:42 25 4
gpt4 key购买 nike

写入 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 上下文中应该有类似的东西。我能找到的都是提到 Spark 的东西使用类似的东西

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

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

最佳答案

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

job.setNumReduceTasks(N);

或者通过系统属性:

-Dmapreduce.job.reduces=N

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

Parquet format

关于hadoop - 如何在Parquet中输出多个s3文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42035300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com