Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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
Python 在Apache Spark中指定输出文件名_Python_Apache Spark - Fatal编程技术网

Python 在Apache Spark中指定输出文件名

Python 在Apache Spark中指定输出文件名,python,apache-spark,Python,Apache Spark,我有一份MapReduce工作,我正试图迁移到PySpark。有没有办法定义输出文件的名称,而不是获取part-xxxxx 在MR中,我使用了org.apache.hadoop.mapred.lib.MultipleTextOutputFormat类来实现这一点 PS:我确实尝试了saveAsTextFile()方法。例如: lines = sc.textFile(filesToProcessStr) counts = lines.flatMap(lambda x: re.split('[\s&

我有一份MapReduce工作,我正试图迁移到PySpark。有没有办法定义输出文件的名称,而不是获取
part-xxxxx

在MR中,我使用了
org.apache.hadoop.mapred.lib.MultipleTextOutputFormat
类来实现这一点

PS:我确实尝试了
saveAsTextFile()
方法。例如:

lines = sc.textFile(filesToProcessStr)
counts = lines.flatMap(lambda x: re.split('[\s&]', x.strip()))\
.saveAsTextFile("/user/itsjeevs/mymr-output")
这将创建相同的
part-0000
文件

[13:46:25] [spark] $ hadoop fs -ls /user/itsjeevs/mymr-output/
Found 3 items
-rw-r-----   2 itsjeevs itsjeevs          0 2014-08-13 13:46 /user/itsjeevs/mymr-output/_SUCCESS
-rw-r--r--   2 itsjeevs itsjeevs  101819636 2014-08-13 13:46 /user/itsjeevs/mymr-output/part-00000
-rw-r--r--   2 itsjeevs itsjeevs   17682682 2014-08-13 13:46 /user/itsjeevs/mymr-output/part-00001
编辑


最近阅读了一篇让Spark用户的生活更轻松的文章。

Spark也在幕后使用Hadoop,所以你可能会得到你想要的东西。这就是
saveAsTextFile
的实现方式:

def saveAsTextFile(path: String) {
  this.map(x => (NullWritable.get(), new Text(x.toString)))
    .saveAsHadoopFile[TextOutputFormat[NullWritable, Text]](path)
}

您可以将自定义的
OutputFormat
传递到
saveAsHadoopFile
。不过,我不知道如何从Python实现这一点。很抱歉回答不完整。

您的输出文件如下所示

myfilename-r-00000 myfilename-r-00001

        SparkConf sparkConf = new SparkConf().setAppName("WCSYNC-FileCompressor-ClusterSaver");
        SparkContext sc = new SparkContext(sparkConf);
            JavaSparkContext context = new JavaSparkContext(sc)
context.hadoopConfiguration().set("mapreduce.output.basename", "myfilename");




saveAsNewAPIHadoopFile(outputpath,
                                Text.class,
                                Text.class,
                                TextOutputFormat.class,
                                context.hadoopConfiguration());

谢谢你,丹尼尔。这绝对是一个起点。将此标记暂时接受。@Jeevs您知道如何为输出文件指定自定义名称了吗。从那时起,我对Hadoop有了更全面的了解。您可以使用自定义的
OutputFormat
,但这需要相当多的努力。文件名来自文件写入系统中相当深的部分。我鼓励您接受文件名的原样。可能在编写之后重命名它们。您是如何在python中导入MultipleTextOutputFormat的?