在Pyspark / Jupyter中设置spark.local.dir

时间:2018-06-29 00:27:57

标签: apache-spark pyspark jupyter livy

我正在从Jupyter笔记本中使用Pyspark,并尝试将大型实木复合地板数据集写入S3。
我收到“设备上没有剩余空间”错误。我四处搜寻,发现这是因为/ tmp填满了。
我现在想编辑spark.local.dir指向一个有空间的目录。
如何设置此参数?
我发现大多数解决方案都建议在使用spark-submit时进行设置。但是,我没有使用spark-submit,而只是从Jupyter将其作为脚本运行。

编辑:我正在使用Sparkmagic与EMR后端配合使用。我认为需要在JSON配置文件中设置spark.local.dir,但不确定如何在其中进行指定。
我尝试在session_configs中添加它,但是没有用。

1 个答案:

答案 0 :(得分:0)

答案取决于您的SparkContext的来源。

如果您使用pyspark启动Jupyter:

PYSPARK_DRIVER_PYTHON='jupyter'\
PYSPARK_DRIVER_PYTHON_OPTS="notebook" \
PYSPARK_PYTHON="python" \
pyspark

然后,当您在Jupyter中收到Python内核时,您的SparkContext已经被初始化。因此,您应该将参数传递给pyspark(在以上命令的末尾):--conf spark.local.dir=...

如果要在Python中构建SparkContext

如果您的笔记本中有以下代码:

import pyspark
sc = pyspark.SparkContext()

然后您可以在创建Spark上下文之前对其进行配置:

import pyspark
conf = pyspark.SparkConf()
conf.set('spark.local.dir', '...')
sc = pyspark.SparkContext(conf=conf)

从命令行配置Spark:

还可以通过在bash中编辑配置文件来配置Spark。您要编辑的文件是${SPARK_HOME}/conf/spark-defaults.conf。您可以按如下所示对其进行追加(如果不存在则创建它):

echo 'spark.local.dir /foo/bar' >> ${SPARK_HOME}/conf/spark-defaults.conf