了解Spark创建的分区数量



pyspark-sql在读取。csv文件时会创建多少分区?

我的理解是number of partitions = math.ceil(file_size/spark.conf.get('spark.sql.files.maxPartitionBytes'))

在我的机器上:

spark.conf.get('spark.sql.files.maxPartitionBytes')
output: 
'134217728b' #128MBs

然而,我没有观察到这种行为。我在磁盘上创建了一个占用96 MB的文件。我在本地模式下运行spark。我有一台8核笔记本电脑。我认为它应该在1个分区中读取。但是,该文件是在8个分区中读取的。下面是我使用的代码库:

import pandas as pd
import numpy as np
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
#creating a small DataFrame. This will occupy 96 MBs on disk
pd.DataFrame({'id':np.arange(10000000),'b':np.random.choice(['a','b','c','d'],size=(10000000,),p=[0.25,0.25,0.25,0.25])}).to_csv('df_s.csv',index=None)
sd=spark.read.csv('df_s.csv',schema="id int, b string")
sd.rdd.getNumPartitions()
output: 8

你能帮我理解为什么我看到8分区不管文件大小?

实际的公式实际上比这更复杂一些。检查下面的计算。你可以在这里找到源代码。

这是你的配置和文件

tbody> <<tr>
Spark配置 默认值
spark.sql.files.maxPartitionBytes128128
spark.sql.files.openCostInBytes4 m4 m
spark.executor.instances1本地
spark.executor。8芯你核心
spark.default.parallelism8=spark.executor.instances * spark.executor.cores
数据文件大小64
数据文件数1

相关内容

  • 没有找到相关文章

最新更新