如何修复外部数据块表中的块大小?

How to fix the block size in external databricks tables?

我有一个 SQL 笔记本来更改数据并插入另一个 table。

当我尝试更改 blobStorage 中的 storaged 块大小时,我想拥有更少和更大的文件。我试着改了很多参数。

所以我发现了一个行为。

当我 运行 笔记本时,命令创建每个文件几乎 10MB。

如果我在数据块中创建 table 内部和 运行 另一个命令

创建external_table为

select * 来自 internal_table

文件有将近 40 MB...

所以我的问题是..

有一种方法可以修复外部数据块 table 中的最小块大小吗? 当我在 SQL Notebook 中转换数据时,我们有最佳实践吗?比如转换所有数据并在本地存储,然后将数据移动到外部源?

谢谢!

Spark 没有直接的方法来控制输出文件的大小。人们使用的一种方法是调用 repartitioncoalesce 来获得所需文件的数量。要使用它来控制输出文件的大小,您需要知道要创建多少个文件,例如要创建 10MB 的文件,如果你的输出数据是 100MB,你可以在 write 命令之前调用 repartition(10)

听起来您正在使用 Databricks,在这种情况下,您可以对 Delta 表使用 OPTIMIZE 命令。 Delta 的 OPTIMIZE 将获取您的基础文件并将它们压缩成大约 1GB 的文件,这是 JVM 在大数据用例中的最佳大小。

https://docs.databricks.com/spark/latest/spark-sql/language-manual/optimize.html