我想创建一个复杂类型来表示复数.
以下作品:
Prelude> data Complex = Complex Int Int
Prelude> :t Complex
Complex :: Int -> Int -> Complex
Run Code Online (Sandbox Code Playgroud)
如何更改此接受任何Num类型,而不仅仅是Int.
我试过以下:
Prelude> data Complex a = Num a => Complex a a
Run Code Online (Sandbox Code Playgroud)
但得到了这个:
* Data constructor `Complex' has existential type variables, a context, or a specialised result type
Complex :: forall a. Num a => a -> a -> Complex a
(Use ExistentialQuantification or GADTs to allow this)
* In the definition of data constructor `Complex'
In the data type …Run Code Online (Sandbox Code Playgroud) 我想对 DeltaTable 执行删除操作,其中要删除的键已存在于 DataFrame 上。
目前我正在收集驱动程序上的DataFrame,然后运行删除操作。然而,这对我来说似乎效率很低。
(类似于下面的东西)
val keys = keysDF
.select("key")
.map(_.getLong(0))
.collect()
DeltaTable.forPath(spark, "/path/to/table")
.delete(col("key").isInCollection(keys))
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来实现这一目标?我正在考虑以某种方式利用我的密钥已经分布在集群上的情况。
我想修改存储在Rust集合(BTreeSet)中的对象。
我想在这里实现以下目标:
use std::collections::BTreeSet;
#[derive(Eq, PartialEq, Ord, PartialOrd, Debug)]
struct X {
key: String,
val: Option<i32>,
}
fn main() {
let mut set: BTreeSet<X> = BTreeSet::new();
set.insert(X {
key: "a".to_string(),
val: Some(1),
});
set.insert(X {
key: "b".to_string(),
val: Some(1),
});
nonify(&mut set, "a".to_string());
println!("{:?}", set);
}
fn nonify(set: &mut BTreeSet<X>, k: String) {
for mut s in set.iter() {
if s.key == k {
s.val = None;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的,因为s不是可变引用。
我该如何在锈病中完成类似的工作?