簡體   English   中英

在Spark 2+中通過SparkSession向Kryo注冊類

[英]Registering Classes with Kryo via SparkSession in Spark 2+

我正在從Spark 1.6遷移到2.3。

我需要用Kryo注冊自定義類。 所以我在這里看到: 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而不是作為一個獨立的val。

所以現在我使用以下內容(並從我的代碼中刪除了任何conf,sc等的痕跡)......

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

我的問題 :如果我不直接使用SparkConfSparkContext我在哪里注冊Kryo的類?

我在這里看到spark.kryo.classesToRegisterhttpsspark.kryo.classesToRegister

我有一個非常廣泛的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.conf.set("spark.kryo.classesToRegister", "any,any2,any3")測試spark-shell中的不同格式時,無論我在字符串中放入any,any2,any3我都不會收到任何錯誤消息any,any2,any3

我試圖使any每個以下格式

  • “org.myorg.myapp.myclass”
  • “我的課”
  • “class org.myorg.myapp.myclass”

我不知道是否有任何成功注冊的東西。

您是否嘗試了以下內容,它應該可以工作,因為它實際上是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()

如果你需要Spark Context,你可以調用: private lazy val sparkContext: SparkContext = sparkSession.sparkContext

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM