scala - 在 Scala 中设置行为
问题描述
今天我注意到 Scala 对它自己的 Set 类型的行为与其包装的集合(至少 SetWrapper)不同。我有一个利用现有 Java 代码的应用程序,该代码在 Java 集上执行简单的“包含”。因此,当从 Scala 调用时,我使用 scala.collection.JavaConverters 来获取将 Java 集传递给此函数 (SetWrapper) 所需的隐式。但是,正在检查集合中是否存在的值可能是 Java 空值。似乎将空值传递给 SetWrapper.contains 方法会导致 NPE。这是来自 SetWrapper.contains 的有问题的片段:
override def contains(o: Object): Boolean = {
try { underlying.contains(o.asInstanceOf[A]) }
catch { case cce: ClassCastException => false }
}
似乎 asInstanceOf 调用导致了 NPE。如果是 Scala,我使用的是 2.11.8 版本。有谁知道这是否已在以后的版本中解决?我没有找到任何关于这个问题的参考。
*** 更多信息
广播 SetWrapper 时,Spark 节点上发生错误。如果发送'native' Scala Set 并在节点上调用'asJava' 方法,则没有问题。显然 SetWrapper 在通过网络广播时不会序列化底层的 Scala 集,它最终在目标节点上为空。
解决方案
推荐阅读
- c# - 从一种方法解析类并注册返回对象
- odoo - 导入 Odoo 模块的问题
- c# - 如何使用 C# Xamarin 在 Android 中模拟单击电源按钮?
- r - 根据 R 数据框中条件的连续出现获取总持续时间
- ansible - ansible 用户模块始终显示已更改
- sqlite - 删除重复行
- amazon-web-services - “Cost Explorer”仪表板中的“EC2-Other”过滤器是什么意思?
- javascript - 为什么可以分配 `async` 和 `await` 关键字?
- python-3.x - 如何使用 aiohttp 将一组请求发布到 2 个 url
- c# - WebDriverEventListener FindingElement 通过选择器获取