在 PySpark 中读取文本文件时有没有办法控制分区数
Is there a way to control the number of partitions when reading a text file in PySpark
我正在 PySpark 中使用以下命令读取文本文件
rating_data_raw = sc.textFile("/<path_to_csv_file>.csv")
有没有办法指定RDD rating_data_raw应该被分割成多少个分区?我想指定大量分区以提高并发性。
正如其他用户所说,您可以通过在 textFile 的可选参数 minPartitions
中设置读取文件时设置将创建的最小分区数。
rating_data_raw = sc.textFile("/<path_to_csv_file>.csv", minPartitions=128)
另一种方法是使用repartition or coalesce,如果你需要减少分区的数量你可以使用coalesce
,否则你可以使用repartition
.
rating_data_raw = sc.textFile("/<path_to_csv_file>.csv").repartition(128)
也可以读取 .csv 文件,然后使用 df 到 RDD 转换检查分区。我在下面留下一个示例结构。
dataset = spark.read.csv("data.csv", header=True, inferSchema='True')
colsDrop = ("data_index", "_c17", "song_title", "artist")
df = dataset.drop(*colsDrop)
rdd = sc.parallelize(df.collect()).partitionBy(8)
这里.partitionBy()允许你控制一个RDD对象的分区数。也可以使用 .getNumPartition() 方法找出这些数字。
唯一需要注意的是 CPU 上的分区数多于线程数不会给我们带来速度增益。
比如我的CPU中的线程数是8,你可以在下面看到一个示例时间分布。
正如你所看到的,我在 8 个分区后无法获得速度。
我正在 PySpark 中使用以下命令读取文本文件
rating_data_raw = sc.textFile("/<path_to_csv_file>.csv")
有没有办法指定RDD rating_data_raw应该被分割成多少个分区?我想指定大量分区以提高并发性。
正如其他用户所说,您可以通过在 textFile 的可选参数 minPartitions
中设置读取文件时设置将创建的最小分区数。
rating_data_raw = sc.textFile("/<path_to_csv_file>.csv", minPartitions=128)
另一种方法是使用repartition or coalesce,如果你需要减少分区的数量你可以使用coalesce
,否则你可以使用repartition
.
rating_data_raw = sc.textFile("/<path_to_csv_file>.csv").repartition(128)
也可以读取 .csv 文件,然后使用 df 到 RDD 转换检查分区。我在下面留下一个示例结构。
dataset = spark.read.csv("data.csv", header=True, inferSchema='True')
colsDrop = ("data_index", "_c17", "song_title", "artist")
df = dataset.drop(*colsDrop)
rdd = sc.parallelize(df.collect()).partitionBy(8)
这里.partitionBy()允许你控制一个RDD对象的分区数。也可以使用 .getNumPartition() 方法找出这些数字。
唯一需要注意的是 CPU 上的分区数多于线程数不会给我们带来速度增益。
比如我的CPU中的线程数是8,你可以在下面看到一个示例时间分布。
正如你所看到的,我在 8 个分区后无法获得速度。