小编ksc*_*ath的帖子

如何在haskell中创建通用复杂类型?

我想创建一个复杂类型来表示复数.

以下作品:

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)

haskell

7
推荐指数
1
解决办法
321
查看次数

使用键的数据帧从 DeltaTable 中删除

我想对 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)

有没有更有效的方法来实现这一目标?我正在考虑以某种方式利用我的密钥已经分布在集群上的情况。

scala apache-spark delta-lake

1
推荐指数
1
解决办法
1256
查看次数

更新Rust集合内的对象

我想修改存储在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不是可变引用。

我该如何在锈病中完成类似的工作?

rust

0
推荐指数
1
解决办法
71
查看次数

标签 统计

apache-spark ×1

delta-lake ×1

haskell ×1

rust ×1

scala ×1