代码之家  ›  专栏  ›  技术社区  ›  kmh

在Spark 2中通过SparkSession向Kryo注册类+

  •  2
  • kmh  · 技术社区  · 8 年前

    我正在从Spark 1.6迁移到2.3。

    https://spark.apache.org/docs/2.3.1/tuning.html#data-serialization

    val conf = new SparkConf().setMaster(...).setAppName(...)
    conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))
    val sc = new SparkContext(conf)
    

    问题是。。。Spark 2+指令中的其他任何地方都表明 SparkSession SparkContext 应该通过了 spark.sparkContext

    因此,现在我使用以下代码(并从代码中删除了conf、sc等的任何痕迹)。。。

    val spark = SparkSession.builder.appName("myApp").getOrCreate()
    

    我的问题 :如果我不使用Kryo,我在哪里注册类 SparkConf 或 SparkContext

    spark.kryo.classesToRegister 在这里: https://spark.apache.org/docs/2.3.1/configuration.html#compression-and-serialization

    我有一个相当广泛的 conf.json 设置 spark-defaults.conf

    https://spark.apache.org/docs/2.3.1/api/scala/index.html#org.apache.spark.sql.SparkSession

    这让我觉得我可以做如下的事情来增强我的记忆力 spark-defaults.conf格式

    val spark = 
      SparkSession
        .builder
        .appName("myApp")
        .config("spark.kryo.classesToRegister", "???")
        .getOrCreate()
    

    但这是什么 ??? 如果我想注册 org.myorg.myapp.{MyClass1, MyClass2, MyClass3} ? 我找不到这种用法的例子。

    会是:

    .config("spark.kryo.classesToRegister", "MyClass1,MyClass2,MyClass3")
    

    .config("spark.kryo.classesToRegister", "class org.myorg.mapp.MyClass1,class org.myorg.mapp.MyClass2,class org.myorg.mapp.MyClass3")
    

    或者别的什么?

    当我尝试在spark shell中通过 spark.conf.set("spark.kryo.classesToRegister", "any,any2,any3") any,any2,any3 .

    any 以下每种格式

    • “org.myorg.myapp.myclass”
    • “类org.myorg.myapp.myclass”

    1 回复  |  直到 8 年前
        1
  •  4
  •   Daniel Hinojosa    8 年前

    你有没有试过下面的方法,它应该是有效的,因为它实际上是 SparkConf API,我认为唯一缺少的是,您只需要将它插入 SparkSession

      private lazy val sparkConf = new SparkConf()
        .setAppName("spark_basic_rdd").setMaster("local[*]").registerKryoClasses(...)
      private lazy val sparkSession = SparkSession.builder()
        .config(sparkConf).getOrCreate()
    

    private lazy val sparkContext: SparkContext = sparkSession.sparkContext

    推荐文章