代码之家  ›  专栏  ›  技术社区  ›  altayseyhan

Spark如何在写入时/写入后为数据帧指定结果文件的数量

  •  0
  • altayseyhan  · 技术社区  · 6 年前

    我看到了几个关于将单个文件写入hdfs的q/a,它似乎使用了 coalesce(1) 这就足够了。

    例如;

    df.coalesce(1).write.mode("overwrite").format(format).save(location)
    

    但如何指定保存操作后将写入的文件的“确切”数量?

    所以我的问题是;

    如果我有数据帧,它由100个分区组成,当我进行写操作时,它会写100个文件吗?

    如果我在调用后进行写操作时有包含100个分区的数据帧 repartition(50)/coalsesce(50) 它会写50个文件吗?

    spark中有没有一种方法可以在将数据帧写入HDFS时指定生成的文件数?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   user10010042    6 年前

    输出文件的数量通常等于写入任务(分区)的数量。在正常情况下,它不能更小(每个编写器编写自己的部分,多个任务不能写入同一个文件),但如果格式有非标准行为或错误,它可以更大 partitionBy 被使用了。

    正常地

    如果我有数据帧,它由100个分区组成,当我进行写操作时,它会写100个文件吗?

    如果我在调用repartition(50)/coalsesce(50)后进行写操作时,数据帧由100个分区组成,它会写50个文件吗?

    是的。

    spark中有没有一种方法可以在将数据帧写入HDFS时指定生成的文件数?