问题
你想使用一个模式创建一个数据集,其中包含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成功后显示运行示例代码。
请检查包裹细胞(AWS|Azure|GCP)文档了解更多信息。