使用自定义类和对象的模式

您必须定义自定义类和对象在一个包,如果你想在一个笔记本中使用它们。

写的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)文档了解更多信息。



这篇文章有用吗?