写下镶木地板数据可以通过以下方式完成.但是,如果我尝试写入的不仅仅是一个文件,而且想要输出到多个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相同的东西.
在典型的 Map-Reduce 应用程序中,输出文件的数量将与作业中的减少数量相同。因此,如果您想要多个输出文件,请相应地设置减少的数量:
job.setNumReduceTasks(N);
或者通过系统属性:
-Dmapreduce.job.reduces=N
我认为 Parquet 格式的每个文件不可能有一列。Parquet 文件的内部结构最初是按行组分割的,然后只有这些行组才按列分割。
归档时间: |
|
查看次数: |
1070 次 |
最近记录: |