我在 GCP 中启动了一个 DataProc 集群,有一个主节点和 3 个工作节点。每个节点有 8 个 vCPU 和 30G 内存。
我开发了一个 pyspark 代码,它从 GCS 读取一个 csv 文件。csv 文件大小约为 30G。
df_raw = (
spark
.read
.schema(schema)
.option('header', 'true')
.option('quote', '"')
.option('multiline', 'true')
.csv(infile)
)
df_raw = df_raw.repartition(20, "Product")
print(df_raw.rdd.getNumPartitions())
这是我将 pyspark 启动到 dataproc 中的方式:
gcloud dataproc jobs submit pyspark gs://<my-gcs-bucket>/<my-program>.py \
--cluster=${CLUSTER} \
--region=${REGION} \
我得到的分区号只有 1。
似乎它只使用了来自一个工作节点的一个 vCore。
如何使其与多个分区并行并使用所有节点和更多 vCore?
尝试重新分区到 20,但它仍然只使用了一个工作节点的一个 vCore,如下所示:
Pyspark 默认分区是 200。所以我很惊讶地看到 dataproc 没有将所有可用资源用于此类任务。