使用spark-shell时,使用sparkConf.set(..)自定义SparkContext

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用spark-shell时,使用sparkConf.set(..)自定义SparkContext相关的知识,希望对你有一定的参考价值。

在Spark中,有3种主要方法可以指定用于创建SparkConfSparkContext的选项:

  1. 作为conf / spark-defaults.conf中的属性 例如,行:spark.driver.memory 4g
  2. 作为火花壳或火花提交的args 例如,spark-shell --driver-memory 4g ...
  3. 在源代码中,在使用SparkConf实例创建SparkContext之前配置它: 例如,sparkConf.set( "spark.driver.memory", "4g" )

但是,在使用spark-shell时,在获得shell提示符时,已经在名为sc的变量中为您创建了SparkContext。使用spark-shell时,如果在您有机会执行任何Scala语句之前已经创建了SparkContext,那么如何使用上面列表中的选项#3来设置配置选项?

特别是,我正在尝试使用Kyro序列化和GraphX。使用Kryo和GraphX的规定方法是在自定义SparkConf实例时执行以下Scala语句:

GraphXUtils.registerKryoClasses( sparkConf )

运行spark-shell时如何实现这一目标?

答案

Spark 2.0+

您应该能够使用SparkSession.conf.set方法在运行时设置一些配置选项,但它主要限于SQL配置。

Spark <2.0

您可以简单地停止现有上下文并创建一个新上下文:

import org.apache.spark.{SparkContext, SparkConf}

sc.stop()
val conf = new SparkConf().set("spark.executor.memory", "4g")
val sc = new SparkContext(conf)

正如你可以在official documentation中读到:

一旦SparkConf对象传递给Spark,它就会被克隆,用户不能再修改它。 Spark不支持在运行时修改配置。

因此,您可以看到停止上下文,它是shell启动后唯一适用的选项。

您始终可以使用--conf的配置文件或spark-shell参数来设置将用作默认上下文的必需参数。如果是Kryo你应该看看:

  • spark.kryo.classesToRegister
  • spark.kryo.registrator

请参阅Compression and Serialization中的Spark Configuration

以上是关于使用spark-shell时,使用sparkConf.set(..)自定义SparkContext的主要内容,如果未能解决你的问题,请参考以下文章

如何在公司代理后面使用 spark-shell 解析外部包?

使用 spark-shell 时的番石榴版本

spark-shell 及 日志配置

如何使用 spark-avro 包从 spark-shell 读取 avro 文件?

为啥 spark-shell 因 NullPointerException 而失败?

在 Mac 上本地启动 spark-shell 时出错