如何修复外部数据块表中的块大小?
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 没有直接的方法来控制输出文件的大小。人们使用的一种方法是调用 repartition
或 coalesce
来获得所需文件的数量。要使用它来控制输出文件的大小,您需要知道要创建多少个文件,例如要创建 10MB 的文件,如果你的输出数据是 100MB,你可以在 write 命令之前调用 repartition(10)
。
听起来您正在使用 Databricks,在这种情况下,您可以对 Delta 表使用 OPTIMIZE
命令。 Delta 的 OPTIMIZE
将获取您的基础文件并将它们压缩成大约 1GB 的文件,这是 JVM 在大数据用例中的最佳大小。
https://docs.databricks.com/spark/latest/spark-sql/language-manual/optimize.html
我有一个 SQL 笔记本来更改数据并插入另一个 table。
当我尝试更改 blobStorage 中的 storaged 块大小时,我想拥有更少和更大的文件。我试着改了很多参数。
所以我发现了一个行为。
当我 运行 笔记本时,命令创建每个文件几乎 10MB。
如果我在数据块中创建 table 内部和 运行 另一个命令
创建external_table为
select * 来自 internal_table
文件有将近 40 MB...
所以我的问题是..
有一种方法可以修复外部数据块 table 中的最小块大小吗? 当我在 SQL Notebook 中转换数据时,我们有最佳实践吗?比如转换所有数据并在本地存储,然后将数据移动到外部源?
谢谢!
Spark 没有直接的方法来控制输出文件的大小。人们使用的一种方法是调用 repartition
或 coalesce
来获得所需文件的数量。要使用它来控制输出文件的大小,您需要知道要创建多少个文件,例如要创建 10MB 的文件,如果你的输出数据是 100MB,你可以在 write 命令之前调用 repartition(10)
。
听起来您正在使用 Databricks,在这种情况下,您可以对 Delta 表使用 OPTIMIZE
命令。 Delta 的 OPTIMIZE
将获取您的基础文件并将它们压缩成大约 1GB 的文件,这是 JVM 在大数据用例中的最佳大小。
https://docs.databricks.com/spark/latest/spark-sql/language-manual/optimize.html