一般而言,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 读取sftp文件 下面是用法 // Construct Spark dataframe using file in FTP server DataFrame df = spark.read(). format("com.springml.spark.sftp"). option("host", "SFTP_HOST"). option("username", ...
1、实验环境: ...(1) 在spark-shell中读取Linux系统本地文件“/home/hadoop/test.txt”,然后统计出文件的行数; 图3 spark统计行数 (2) 在spark-shell中读取HDFS系统文件“/user/hadoop/test.txt”
上一节我们简单介绍了RDD中转化和执行操作的用法,本节将通过一个具体的示例来加深对RDD的认识。 一.需求 统计本地文件中单词出现次数 二.操作流程 1.读取外部文件创建JavaRDD; 2.通过flatMap转化操作切分字符...
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验...
Spark SQL 日志处理实战,日志文件20000行
Spark - 生成GitHub Stars趋势迷你图⚡️
java写的一个spark小文件合并工具,支持text、parquet、orc等格式,分享给有需要的人
在Spark SQL执行etl时候会有最终结果大小只有几百k,但是小文件一个分区有上千的情况。危害: HDFS有最大文件数限制 浪费磁盘资源(可能存在空文件) Hive中进行统计,计算的时候,会产生很多个map,影响计算的速度 ...
spark md5 前端文件MD5加密
Scala中文分词+SparkML逻辑回归 实现 中文文本分类
spark - 小实践(2)dataset实战测试数据 people.json peopleScore.json
sparkStreaming job生成流程图
users.parquet people.json spark ,spark学习中的parquet文件和json文件
spark笔记整理文档spark笔记整理文档spark笔记整理文档
为了把spark2.4.X和hadoop2.7.3升级为spark3.1.1和hadoop3.2.2找了半天资源,最后还是自己手动编写了一个。已经在集群上测试可用
spark中用scala编写累加器小程序统计指定文章中的空白行,然后通过split函数通过空格切分文章,输出到指定的目录中。
Spark配置core-site.xml的一个简单的pdf文档,供给给打架,然后这里面配置的项目有节点数的多少和节点数的大小
Spark: svn co http://svn.igniterealtime.org/svn/repos/spark/trunk spark 辛辛苦苦从SVN上下载下来的SOURCE Spark 2.6.3 Spark: spark/trunk part001 第一部分
centos7编译spark2.3v2生成安装包,需要hadoop、java8、maven环境