【问题标题】:How to merge small files in SparkSQL? [duplicate]如何在 SparkSQL 中合并小文件? [复制]
【发布时间】:2018-10-11 00:24:06
【问题描述】:

我正在使用 SparkSQL 运行 Spark 应用程序。如何合并小文件?我知道 .repartition.coalesce 但这不能使用 SparkSQL 完成。

【问题讨论】:

  • spark.sql 返回一个数据帧,在写入不同位置之前确实可以合并和重新分区
  • 如果里面的sql是CTAS,我该怎么做? spark.sql("create table as select....")
  • 目前制作的文件大小是多少?有多少个文件?
  • 1-5MB 文件,它正在生成 20000 个文件
  • 我认为一般建议是使用spark.sql,获取一个数据框,然后在合并后使用df.write,输出一些Parquet(或ORC)数据,然后使用create external table运行您写信的位置

标签: apache-spark apache-spark-sql


【解决方案1】:

摘自DeepSense 工程博客(2016 年)

Distribute bycluster by 子句是 SparkSQL 中非常酷的特性。不幸的是,这个主题仍然相对 大多数用户都不知道
...

SET spark.sql.shuffle.partitions = 2
SELECT * FROM df DISTRIBUTE BY key

DataFrame API 中的等效项:
df.repartition($"key", 2)

...


警告:我不能证明它像宣传的那样有效;当我找到那个博客时,它看起来很有前途,但从那以后它就一直在我的待办事项列表上:-/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2016-12-30
    相关资源
    最近更新 更多