强制为每个读取的文件生成一个分区

jchrr9hc  于 2021-05-24  发布在  Spark
关注(0)|答案(0)|浏览(205)

下一个代码是生成和写入8个分区,但在读取时,它会为每个核心生成一个分区。我知道这是因为文件太小,然后试图最大化每个核心的记录数。
是否可以强制读取器为每个文件生成一个分区?
在本例中,spark写入8个文件,但在读取时,它会生成4个分区,就像使用的内核数一样。

from pyspark import Row
from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .master("local[4]") \
    .appName("Testing partitions") \
    .getOrCreate()

sc = spark.sparkContext
df = spark.createDataFrame(sc.parallelize(range(1, 32), 8).map(lambda i: Row(col1=i))).persist()
print(df.rdd.getNumPartitions())

# Output is 8

df.write \
    .mode('overwrite') \
    .csv("tmp/test_partitions/in")

df = spark \
    .read \
    .csv("tmp/test_partitions/in").persist()
print(df.rdd.getNumPartitions())

# Output is 4

df.write \
    .mode('overwrite') \
    .csv("tmp/test_partitions/out")

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题