考虑以下代码示例,其中我们在创建 Databricks 集群时将 spark.sql.files.maxPartitionBytes
配置为不同的值,来观察文件处理方式的差异:
from pyspark.sql.functions import *
from pyspark.sql.types import *
# Read a sample CSV file
df = spark.read.format("csv") \
.option("header", True) \
.option("inferSchema", True) \
.load("dbfs:/path/to/sample.csv")
# Configuration 1
spark.conf.set("spark.sql.files.maxPartitionBytes", "128mb")
df.write.format("csv") \
.mode("overwrite") \
.option("header", True) \
.option("compression", "gzip") \
.save("dbfs:/path/to/output_128mb/")
# Configuration 2
spark.conf.set("spark.sql.files.maxPartitionBytes", "64mb")
df.write.format("csv") \
.mode("overwrite") \
.option("header", True) \
.option("compression", "gzip") \
.save("dbfs:/path/to/output_64mb/")
在上述代码示例中,我们首先读取一个 CSV 文件,并接着将 spark.sql.files.maxPartitionBytes
配置为 128mb
, 将文件使用 gzip 压缩格式写入 Databricks 文件系统的指定路径。接着,我们将同样的文件使用另外一种配置(64mb
)再次写入 Databricks 文件系统的另一个路径。
我们可以通过使用以下命令来检查写入文件的大小以比较它们之间的差异:
import os
def print_file_size(path):
file_size = os.path.getsize("/dbfs" + path)/1024/1024
print(f"Size of {path} - {round(file_size, 2)} MB")
print_file_size("/path/to/output_128mb/")
print_file_size("/path/to/output_64mb/")
我们可以观察到,使用 64mb
配