我注意到大多数Scalaz类都不可序列化.在这种情况下,我正在尝试使用类型类在Spark中自定义排序数组.
减少示例可能是这样的:
> val ord = Order[T]{ ... }
> sc.makeRDD[T](...).grupBy(...).map {
case (_, grouped) => IList[T](grouped.toList).sorted(ord).distinct(ord)
}
Run Code Online (Sandbox Code Playgroud)
正如您所期望的那样,此实现会抛出一个NotSerializableException因为Order[T]不可序列化.
有没有办法使Order[T]序列化?在一个完美的世界里,我希望仍然使用scalaz来避免这个问题.在一个不那么完美的版本中,我愿意考虑其他实现.
如果发生这种情况,必须以可持续和可扩展的方式保持自定义排序和不同的实现.
我在Jinja写了一个Ansible模板,它有以下模式:
# Inventory
[Group1]
vm1 cluster=clusterName
[Group2]
vm2
Run Code Online (Sandbox Code Playgroud)
请注意,第二个组没有cluster定义属性.
# Task Definition
vars:
potential_seeds: "{{groups.all | map('extract', hostvars) | groupby('cluster') | list}}"
Run Code Online (Sandbox Code Playgroud)
当然,这会导致明显的错误:
"the field 'vars' has an invalid value, which appears to include a variable that is undefined. The error was: 'dict object' has no attribute 'cluster'
我需要以一种只对已cluster定义的字典进行分组的方式过滤列表.