hive时,如何控制spark流中的行数和/或输出文件大小?

lsmepo6l  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(681)

使用spark流来读取和处理来自kafka的消息并写入hdfs-hive。由于我希望避免创建许多小文件来对文件系统进行垃圾邮件处理,所以我想知道是否有办法确保最小的文件大小,和/或在文件中强制最小数量的输出行(超时除外)。谢谢。

p5cysglq

p5cysglq1#

据我所知,没有办法控制输出文件中的行数。但是你可以控制输出文件的数量。
控制这一点并考虑数据集的大小可能有助于满足您的需要,因为您可以计算输出中每个文件的大小。你可以用 coalesce 以及 repartition 命令:

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

它们都用于创建作为参数给定的分区数。因此,如果设置2,输出中应该有2个文件。
不同之处在于 repartition 您可以增加和减少分区,而 coalesce 你只能减少。
另外,请记住 repartition 执行完全洗牌以在分区之间平均分配数据,这可能会耗费资源和时间。另一方面, coalesce 不执行完全洗牌,而是合并现有分区。
你可以在这里的另一个答案中找到一个很棒的解释

相关问题