没有工作节点 运行 作业的 PySpark shell 怎么办?

How can a PySpark shell with no worker nodes run jobs?

我在 pypsark shell(mac,8 核)中有 运行 以下几行。

import pandas as pd
df = spark.createDataFrame(pd.DataFrame(dict(a = list(range(1000)))
df.show()

我想计算我的工作节点(并查看每个节点的核心数),所以我 运行 :

中的 python 命令
sc.getExecutorMemoryStatus().keys()
# JavaObject id=o151

len([executor.host() for executor in sc.statusTracker().getExecutorInfos() ]) -1
# 0

以上代码表示我有1个工人。所以,我检查了 spark UI 我只有 8 核的驱动程序:

驱动中的内核可以完成工作吗?如果是这样,是否有 7 个内核在工作,1 个保留用于“驱动程序”功能?为什么不自动创建工作节点?

Spark 不能为您提供的硬件找出完美的集群(尽管它非常task-specific什么是 完美 基础设施)

实际上,如果您在 YARN master 上 运行(参见 docs 中的 spark.executor.cores 选项),您描述的行为是 Spark 默认设置这样的基础设施的行为。

要修改它,您必须在 运行ning pyspark-shell 时添加一些选项,或者在您的代码中执行,例如:

conf = spark.sparkContext._conf.setAll([('spark.executor.memory', '4g'), ('spark.executor.cores', '4'), ('spark.cores.max', '4'), ('spark.driver.memory','4g')])
spark.sparkContext.stop()
spark = SparkSession.builder.config(conf=conf).getOrCreate()

可以找到更多相关信息 and