我有一个来自importing from Postgres via JDBC的20个分区的RDD。我有一个有5名工人(5个核心)的集群。我只是想根据以下内容计算每个分区中的元素数量:
def count_in_a_partition(idx, iterator):
count = 0
for _ in iterator:
count += 1
return idx, count
rdd.mapPartitionsWithIndex(count_in_a_partition).collect()
上面的代码一直在运行,Web GUI显示工作者根本没有被使用,即" 0使用"。即使Memory in use
显示0.0 B Used
。似乎有些不对劲。你会期望至少有一个工人做某事。我可以做些什么来加速计算并利用核心?
答案 0 :(得分:0)
我认为Memory per Node: 20.0 GB
大于每个节点2.7 GB
中可用的内存是个问题。降低它有助于:
from pyspark.sql import SparkSession
spark = SparkSession\
.builder\
.appName("jupyter-pyspark")\
.master("spark://spark-master:7077")\
.config("spark.executor.memory", "2g")\
.config("spark.driver.memory", "2g")\
.getOrCreate()