Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 更改Spark Streaming中的输出文件名_Hadoop_Apache Spark_Spark Streaming_Spark Dataframe - Fatal编程技术网

Hadoop 更改Spark Streaming中的输出文件名

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工作,按照逻辑,它的性能非常好。但是,当我使用saveAsTextFile将文件保存在s3存储桶中时,输出文件的名称的格式为part-00000、part-00001等。有没有办法更改输出文件名


谢谢。

在Spark中,您可以使用saveAsNewAPIHadoopFile并在hadoop配置中设置mapreduce.output.basename参数来更改前缀(仅“部分”前缀)

您的文件将命名为:yourprofix-r-00001

在hadoop和Spark中,输出中可以有多个文件,因为可以有多个reducer(hadoop)或多个分区(Spark)。然后,您需要为它们中的每一个提供唯一的名称,这就是为什么不可能覆盖文件名最后一部分的序列号的原因

但是,如果您想对文件名有更多的控制,可以扩展TextOutputFormatFileOutputFormat并覆盖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);