使用自定義類和對象的模式

您必須定義自定義類和對象在一個包,如果你想在一個筆記本中使用它們。

寫的saritha.shivakumar

去年發表在:2022年11月8日

問題

你想使用一個模式創建一個數據集,其中包含Scala枚舉字段(類和對象)。當您運行您的代碼在筆記本電池,你得到一個ClassNotFoundException錯誤。

示例代碼

% scala對象TestEnum擴展枚舉{類型TestEnum =值val E1, E2、E3 =價值}spark.implicits進口。_進口TestEnum。_ case類TestClass(我:Int, e: TestEnum) {} val ds = Seq (TestClass (TestEnum.E1)) .toDS

錯誤消息

ClassNotFoundException: lineb3e041f628634740961b78d5621550d929。讀iw美元美元iw iw iw美元美元美元iw iw TestEnum美元美元

導致

ClassNotFoundException錯誤就出現了,因為沒有定義的示例代碼包中的類和對象。

解決方案

如果你想使用自定義Scala中定義的類和對象筆記本(Apache火花和跨筆記本會話)你必須定義類和對象在一個包和包導入到你的筆記本。

刪除

信息

隻包中的類和對象定義可以細胞。包細胞不能包含任何函數定義,價值,或變量。

定義類和對象

此示例代碼首先創建包com.databricks.example。然後,它定義了對象TestEnum之前和分配值,定義類TestClass

% com.databricks scala包。/ /創建一個包。對象TestEnum擴展枚舉{/ /定義一個對象叫TestEnum。類型TestEnum =值val E1, E2、E3 =值/ /枚舉值}case類TestClass(我:Int,其他:TestEnum.Value) / /定義一個類稱為TestClass。
刪除

信息

類中定義的包不能重新定義集群沒有重啟。

導入包

定義的類和對象後,您可以創建的包導入到一個筆記本和使用類和對象。

這個示例代碼首先導入com.databricks.example包,我們隻定義。

然後評估DataFrame使用TestClass類和TestEnum對象。中定義com.databricks.example包中。

% scala com.databricks進口。例如val df = sc.parallelize(陣列(example.TestClass (1 (example.TestEnum.E1)))) .toDS(),告訴()

DataFrame成功後顯示運行示例代碼。

顯示運行示例代碼的結果使用Scala包中定義的自定義類和對象。

請檢查包裹細胞(AWS|Azure|GCP)文檔了解更多信息。



這篇文章有用嗎?