第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Spark 2.4 中加載自定義轉(zhuǎn)換器

如何在 Spark 2.4 中加載自定義轉(zhuǎn)換器

慕的地6264312 2022-10-12 09:59:10
我正在嘗試在 Spark 2.4.0 中創(chuàng)建一個自定義轉(zhuǎn)換器。保存它工作正常。但是,當我嘗試加載它時,出現(xiàn)以下錯誤:java.lang.NoSuchMethodException: TestTransformer.<init>(java.lang.String)  at java.lang.Class.getConstructor0(Class.java:3082)  at java.lang.Class.getConstructor(Class.java:1825)  at org.apache.spark.ml.util.DefaultParamsReader.load(ReadWrite.scala:496)  at org.apache.spark.ml.util.MLReadable$class.load(ReadWrite.scala:380)  at TestTransformer$.load(<console>:40)  ... 31 elided這向我表明它找不到我的變壓器的構(gòu)造函數(shù),這對我來說真的沒有意義。MCVE:import org.apache.spark.sql.{Dataset, DataFrame}import org.apache.spark.sql.types.{StructType}import org.apache.spark.ml.Transformerimport org.apache.spark.ml.param.ParamMapimport org.apache.spark.ml.util.{DefaultParamsReadable, DefaultParamsWritable, Identifiable}class TestTransformer(override val uid: String) extends Transformer with DefaultParamsWritable{    def this() = this(Identifiable.randomUID("TestTransformer"))    override def transform(df: Dataset[_]): DataFrame = {        val columns = df.columns        df.select(columns.head, columns.tail: _*)    }    override def transformSchema(schema: StructType): StructType = {        schema    }    override def copy(extra: ParamMap): TestTransformer = defaultCopy[TestTransformer](extra)}object TestTransformer extends DefaultParamsReadable[TestTransformer]{    override def load(path: String): TestTransformer = super.load(path)}val transformer = new TestTransformer("test")transformer.write.overwrite().save("test_transformer")TestTransformer.load("test_transformer")運行這個(我使用的是 Jupyter notebook)會導致上述錯誤。我嘗試將其編譯為 .jar 文件并將其運行,沒有任何區(qū)別。如何制作可以保存和加載的自定義 Spark 轉(zhuǎn)換器?
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

我可以在 spark-shell 中重現(xiàn)您的問題。

試圖找到我調(diào)查的問題的根源DefaultParamsReadableDefaultParamsReader來源,我可以看到他們利用 Java 反射。

https://github.com/apache/spark/blob/v2.4.0/mllib/src/main/scala/org/apache/spark/ml/util/ReadWrite.scala

第 495-496 行

val instance =
    cls.getConstructor(classOf[String]).newInstance(metadata.uid).asInstanceOf[Params]

我認為 scala REPL 和 Java 反射不是好朋友。

如果您運行此代碼段(在您的代碼之后):

new TestTransformer().getClass.getConstructors

你會得到以下輸出:

res1: Array[java.lang.reflect.Constructor[_]] = Array(public TestTransformer($iw), public TestTransformer($iw,java.lang.String))

是真的!TestTransformer.<init>(java.lang.String)不存在。

我找到了2個解決方法,

  1. 用 sbt 編譯你的代碼并創(chuàng)建一個 jar,然后包含在 spark-shell 中:require,對我有用(你提到你嘗試了一個 jar,但我不知道如何)

  2. 將代碼粘貼到 spark-shell 中:paste -raw,效果也很好。我想-raw可以防止 REPL 對您的課程進行惡作劇。請參閱:https ://docs.scala-lang.org/overviews/repl/overview.html

我不確定如何將其中的任何一個調(diào)整到 Jupyter,但我希望這些信息對你有用。

注意:我實際上在 spark 2.4.1 中使用了 spark-shell


查看完整回答
反對 回復 2022-10-12
  • 1 回答
  • 0 關(guān)注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號