`

spark中saveAsTextFile如何最终生成一个文件

 
阅读更多

 一般而言,saveAsTextFile会按照执行task的多少生成多少个文件,比如part-00000一直到part-0000n,n自然就是task的个数,亦即是最后的stage的分区数。那么有没有办法最后只生成一个文件,而不是成百上千个文件了?答案自然是有办法。

  在RDD上调用coalesce(1,true).saveAsTextFile(),意味着做完计算之后将数据汇集到一个分区,然后再执行保存的动作,显然,一个分区,Spark自然只起一个task来执行保存的动作,也就只有一个文件产生了。又或者,可以调用repartition(1),它其实是coalesce的一个包装,默认第二个参数为true。

  事情最终就这么简单吗?显然不是。你虽然可以这么做,但代价是巨大的。因为Spark面对的是大量的数据,并且是并行执行的,如果强行要求最后只有一个分区,必然导致大量的磁盘IO和网络IO产生,并且最终执行reduce操作的节点的内存也会承受很大考验。Spark程序会很慢,甚至死掉。

  这往往是初学Spark的一个思维陷阱,需要改变原先那种单线程单节点的思维,对程序的理解要转变多多个节点多个进程中去,需要熟悉多节点集群自然产生多个文件这种模式。

  此外,saveAsTextFile要求保存的目录之前是没有的,否则会报错。所以,最好程序中保存前先判断一下目录是否存在。

 .coalesce(1,true).saveAsTextFile("file:///d:/test/out/")

 

分享到:
评论

相关推荐

    spark - 小实践(2)-- 模拟数据

    `read.json()`函数会将JSON文件转换为DataFrame,其中的每行数据对应JSON文件中的一个对象。 对于`people.json`和`peopleScore.json`,假设它们分别包含了人员信息和人员得分的数据,可能包含字段如`name`、`age`、...

    Spark小文件异步合并工具

    为了解决这个问题,出现了"Spark小文件异步合并工具",它是一个用Java编写的实用程序,专门用于合并HDFS上的小文件,以提高处理效率。 该工具支持多种数据格式,包括text(文本格式)、parquet(列式存储格式)和...

    实验七:Spark初级编程实践

    假设有一个包含学生姓名和成绩的数据集,Spark 应用可以读取这些文件,通过 MapReduce 或 DataFrame/Dataset API 进行计算,最后输出平均成绩。 这些实验步骤涵盖了 Spark 开发的基本流程,包括环境搭建、基本操作...

    Spark官方中文文档

    尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验...

    Spark生成GitHubStars趋势迷你图

    在Spark项目中,生成GitHub Stars趋势迷你图是一个有趣且实用的应用,它可以帮助开发者直观地了解他们的项目受欢迎程度随时间的变化情况。这个应用通常涉及到JavaScript开发和数据可视化技术,特别是图片展示处理...

    ubuntu spark中文乱码解决方法.docx

    Ubuntu Spark 中文乱码解决方法是指在 Ubuntu 操作系统中使用 Spark 时遇到的中文乱码问题的解决方案。该问题是由于 Spark 自带的 JRE 中没有合适的中文字体所致。 解决 Spark 乱码的方法可以通过创建 fallback ...

    spark sftp

    spark 读取sftp文件 下面是用法 // Construct Spark dataframe using file in FTP server DataFrame df = spark.read(). format("com.springml.spark.sftp"). option("host", "SFTP_HOST"). option("username", ...

    Spark生产优化总结

    压缩文件可以分为可分割和不可分割两种,如果压缩文件不可分割,那么 Spark 生成的任务只有一个,如果是结构化的 Sequence files 或者 ORC files,它压缩的是每一个块,那么任务的并行度跟块数一致。 文件格式和...

    Spark SQL 日志处理实战,日志文件20000行

    在本实践项目中,我们将深入探讨如何利用Spark SQL来处理日志文件,特别是针对一个包含20000行的日志文件进行分析。Spark SQL是Apache Spark的一个重要组件,它结合了SQL查询语言和DataFrame API,使得处理大规模...

    spark解析csv文件,存入数据库

    在这部分文件内容中,我们首先看到了对Spark解析CSV文件并存入数据库的一个简单介绍。接下来,会逐步展开几个重要知识点,包括Spark框架的基础、如何使用Spark读取和解析CSV文件、数据处理的相关操作以及如何将处理...

    spark笔记整理文档

    Spark最初由加州大学伯克利分校AMPLab开发,其设计理念是提供一个快速、通用且可扩展的大数据处理系统。与Hadoop MapReduce相比,Spark通过内存计算显著提升了迭代算法的执行效率,同时支持多种数据处理模型,包括...

    centos7编译spark2.3v2生成安装包

    本文档将详细介绍如何在 CentOS 7 环境下编译 Spark 2.3 版本,并最终生成可安装的包。此过程涉及安装必要的软件环境(如 Java 8、Maven)以及配置 Spark 的编译参数。通过本指南,读者可以了解到整个编译流程中的...

    Spark 最简单WordCount

    转换操作不会立即执行,而是生成一个新的RDD表示未来操作,这种特性称为延迟执行。 - 只有当执行行动操作(如`count`或`foreach`)时,转换操作才会真正执行。 通过这个简单的WordCount示例,我们可以了解Spark的...

    Spark学习---统计文件单词出现次数

    上一节我们简单介绍了RDD中转化和执行操作的用法,本节将通过一个具体的示例来加深对RDD的认识。 一.需求 统计本地文件中单词出现次数 二.操作流程 1.读取外部文件创建JavaRDD; 2.通过flatMap转化操作切分字符...

    smack_文件传给spark实例

    在这个过程中,你需要创建一个Smack连接,然后通过连接建立会话,找到目标Spark节点(通常是一个运行在特定XMPP服务器上的Spark实例),并通过发送IQ(信息查询)请求来发起文件传输。 实现这一过程的关键步骤包括...

    spark配置文件

    - 创建一个Java项目,命名为`Spark`。 - 将Spark的源代码文件夹(`build/documentation/src`)导入项目。 - 对于`src`文件夹,右键选择`Build Path` -> `Remove from Build Path`移除。 - 重新选择`src/java`...

    大数据技术原理及应用课实验7 :Spark初级编程实践

    Spark是Apache软件基金会下的一个大数据处理框架,以其高效、易用和灵活性著称。在"大数据技术原理及应用课实验7:Spark初级编程实践"中,我们主要关注Spark的两个核心知识点:数据读取和Spark应用程序的开发流程。 ...

    基于Scala的Spark模型转换为PMML格式设计源码

    本设计源码提供了一个基于Scala的Spark模型转换为PMML格式。项目包含21个文件,主要使用Scala编程语言,并包含了Java。文件类型包括9个XML配置文件、2个CRC文件、2个Scala源代码文件、1个名称文件、1个Markdown文档...

Global site tag (gtag.js) - Google Analytics