Hadoop 更改Spark Streaming中的输出文件名
我正在运行一个Spark工作,按照逻辑,它的性能非常好。但是,当我使用saveAsTextFile将文件保存在s3存储桶中时,输出文件的名称的格式为part-00000、part-00001等。有没有办法更改输出文件名Hadoop 更改Spark Streaming中的输出文件名,hadoop,apache-spark,spark-streaming,spark-dataframe,Hadoop,Apache Spark,Spark Streaming,Spark Dataframe,我正在运行一个Spark工作,按照逻辑,它的性能非常好。但是,当我使用saveAsTextFile将文件保存在s3存储桶中时,输出文件的名称的格式为part-00000、part-00001等。有没有办法更改输出文件名 谢谢。在Spark中,您可以使用saveAsNewAPIHadoopFile并在hadoop配置中设置mapreduce.output.basename参数来更改前缀(仅“部分”前缀) 您的文件将命名为:yourprofix-r-00001 在hadoop和Spark中,输出中可
谢谢。在Spark中,您可以使用saveAsNewAPIHadoopFile并在hadoop配置中设置mapreduce.output.basename参数来更改前缀(仅“部分”前缀) 您的文件将命名为:yourprofix-r-00001 在hadoop和Spark中,输出中可以有多个文件,因为可以有多个reducer(hadoop)或多个分区(Spark)。然后,您需要为它们中的每一个提供唯一的名称,这就是为什么不可能覆盖文件名最后一部分的序列号的原因 但是,如果您想对文件名有更多的控制,可以扩展TextOutputFormat或FileOutputFormat并覆盖getUniqueFile方法。[Java解决方案] 假设你有:
JavaRDD<Text> rows;
多田 可能的复制最好使用外壳而不是火花。例如,您可以使用
coalesce
将所有内容收集到一个文件中,但这会给内存带来压力-而且,hdfs的工作原理与常规文件系统略有不同,Spark总是为每个输出创建不同的目标/文件夹。这不是一种。。。谢谢你的评论。我们可以将文件保存到s3存储桶而不是hdfs吗?可以,Amazon s3与Hadoop API兼容。Hadoop文件系统实现了多个协议/文件系统,包括s3:。你可以使用任何一个几乎透明的问题(你只需要为每种连接指定具体的参数)。如果你认为我的回答对你的原始问题有帮助,请接受。你能看看这个问题吗?我想现在是getUniqueName
。是否有一种方法可以使用行中的字段作为文件名,例如id?嗨,我尝试设置basename,但无效:job.getConfiguration().set(“mapreduce.output.basename”,inputStrategyName);javapairdd.saveAsNewAPIHadoopFile(outputPath,new AvroKey().getClass(),NullWritable.class,AvroKeyOutputFormat.class,job.getConfiguration());作业对象的类别是什么?只需为这个类创建一个新的配置对象:org.apache.hadoop.conf.configuration;
JavaRDD<Text> rows;
Configuration hadoopConf = new Configuration();
hadoopConf.set("mapreduce.output.basename", "customPrefix");
rows.mapToPair(row -> new Tuple2(null, row)).saveAsNewAPIHadoopFile(outputPath, NullWritable.class, Text.class, TextOutputFormat.class, hadoopConf);