当前位置: 首页 > 知识库问答 >
问题:

在写入HDFS-hive时,如何控制Spark流中的行数和/或输出文件大小?

谈桐
2023-03-14

使用火花流读取和处理来自Kafka的消息并写入HDFS-Hive。由于我希望避免创建许多垃圾文件系统的小文件,我想知道是否有办法确保最小的文件大小,和/或强制在文件中输出行数最少的能力,超时除外。谢谢。

共有1个答案

仲孙昊焱
2023-03-14

据我所知,没有办法控制输出文件中的行数。但您可以控制输出文件的数量。

控制它并考虑您的数据集大小可能会帮助您满足您的需求,因为您可以计算输出中每个文件的大小。您可以使用coalesce重新分区命令来做到这一点:

df.coalesce(2).write(...)
df.repartition(2).write(...)

它们都用于创建作为参数给定的分区数。因此,如果设置2,输出中应该有2个文件。

不同之处在于,使用重新分区您可以增加和减少分区,而使用coalesce您只能减少。

另外,请记住,重新分区会执行一次完全洗牌,以便在分区之间平均分配数据,这可能会耗费大量资源和时间。另一方面,coalesce不执行完全洗牌,而是合并现有分区。

你可以在另一个答案中找到一个很棒的解释

 类似资料:
  • 使用Spark streaming从Kafka主题读取Json数据 我使用DataFrame处理数据,稍后我希望将输出保存到HDFS文件。问题在于使用: 产生许多文件,有些很大,有些甚至是0字节。 有没有办法控制输出文件的数量?此外,为了避免“相反”的问题,是否有办法也限制每个文件的大小,以便在当前达到一定大小/行数时写入新文件?

  • 经过一些处理后,我得到了一个DStream[字符串,ArrayList[字符串]],所以当我使用saveAsTextFile将其写入hdfs时,每个批处理后它都会覆盖数据,所以如何通过附加到以前的结果来写入新结果 编辑:: 如果有人可以帮助我将输出转换为avro格式,然后写入HDFS并附加

  • 我有一个具有以下目录结构的S3位置,其顶部创建了一个配置单元表: 假设我有一个Spark程序,它使用下面的代码行将数据跨多个分区写入上面的表位置: spark在写入S3位置时是否锁定数据文件? 我们如何使用Spark作为ETL工具来处理这样的并发情况?

  • 问题内容: 我已尝试使用此代码建议(http://www.daniweb.com/forums/thread23883.html#)将控制台输出写入txt文件,但未成功。怎么了? 问题答案: 你需要执行以下操作: 第二句话是关键。它将假定的“最终” 属性的值更改为提供的值。 可以使用类似的方法(和)来更改标准输入和错误流。有关详细信息,请参考。 上面的一个更通用的版本是这样的: 如果为is ,则流

  • 我有一个火花1.2.0的火花流环境,我从本地文件夹中检索数据,每次我发现一个新文件添加到文件夹中时,我都会执行一些转换。 为了对DStream数据执行分析,我必须将其转换为数组 然后,我使用获得的数据提取我想要的信息,并将其保存在HDFS上。 由于我真的需要使用Array操作数据,因此不可能使用(这将正常工作)在HDFS上保存数据,我必须保存RDD,但使用此先决条件,我终于有了名为part-000

  • 有没有办法使用hadoop流作业将这20,000个文件合并到10,000个文件?或者,换句话说,有没有办法控制hadoop流式输出文件的数量? 提前感谢!