当我打电话时df.groupby([...]).apply(lambda x: ...),表现很糟糕。有没有更快/更直接的方法来做这个简单的查询?
为了证明我的观点,这里有一些代码来设置 DataFrame:
import pandas as pd
df = pd.DataFrame(data=
{'ticker': ['AAPL','AAPL','AAPL','IBM','IBM','IBM'],
'side': ['B','B','S','S','S','B'],
'size': [100, 200, 300, 400, 100, 200],
'price': [10.12, 10.13, 10.14, 20.3, 20.2, 20.1]})
price side size ticker
0 10.12 B 100 AAPL
1 10.13 B 200 AAPL
2 10.14 S 300 AAPL
3 20.30 S 400 IBM
4 20.20 S 100 IBM
5 20.10 B 200 IBM
Run Code Online (Sandbox Code Playgroud)
现在这是我需要加速的非常慢的部分:
%timeit avgpx = df.groupby(['ticker','side']) \
.apply(lambda group: (group['size'] * group['price']).sum() / group['size'].sum())
3.23 …Run Code Online (Sandbox Code Playgroud) 我正在使用 dagster 0.11.3(撰写本文时最新版本)
我创建了一个 Dagster 管道(另存为 pipeline.py),如下所示:
@solid
def return_a(context):
return 12.34
@pipeline(
mode_defs=[
ModeDefinition(
executor_defs=[dask_executor] # Note: dask only!
)
]
)
def the_pipeline():
return_a()
Run Code Online (Sandbox Code Playgroud)
我将 DAGSTER_HOME 环境变量设置为包含名为 dagster.yaml 的文件的目录,该文件是一个空文件。这应该没问题,因为根据这些文档,默认值是合理的: https: //docs.dagster.io/deployment/dagster-instance。
我有一个现有的 Dask 集群在“scheduler:8786”上运行。基于这些文档:https://docs.dagster.io/deployment/custom-infra/dask,我创建了一个名为 config.yaml 的运行配置,如下所示:
execution:
dask:
config:
cluster:
existing:
address: "scheduler:8786"
Run Code Online (Sandbox Code Playgroud)
我已经成功地将这个运行配置与 Dagster 一起使用,如下所示:
$ dagster pipeline execute -f pipeline.py -c config.yaml
Run Code Online (Sandbox Code Playgroud)
(我检查了 Dask 日志并确保它确实在我的 Dask 集群上运行)
我的问题是: 如何让 Dagit 使用这个 Dask 集群?我发现的唯一似乎相关的是: https: //docs.dagster.io/_apidocs/execution#executors
...但它甚至没有提到 Dask 作为一个选项(它有 dagster.in_process_executor 和 dagster.multiprocess_executor,它们似乎与 dask 完全无关)。 …
我需要将声明与可变参数模板函数的定义分开:
struct A
{
// In-line declaration of function
template<typename...Args>
A(Args&&...args);
};
// Out-of-line definition of function
template<typename...Args>
A<Args...>::A(Args&&...args)
{}
int main()
{
A a("hello");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
......这是我得到的错误(Clang 3.9 OS X 10):
main.cpp:8:2: error: expected unqualified-id
A<Args...>::A(Args&&...args)
^
Run Code Online (Sandbox Code Playgroud)
我需要在某处放置'typename'吗?提前感谢您的帮助!
我想做这样的伪代码:
let mut vec = Vec<u8>::new();
vec.resize(1024); // Some large-enough size
serialize(&vec, || { .... });
// ... other code blah blah ...
deserialize(&vec); // This will execute the closure
Run Code Online (Sandbox Code Playgroud)
理想情况下,我将能够在另一个线程中运行反序列化,这才是真正做到这一点的重点。
我不想发送操作码和数据,因为这种方式打开了一个非常干净的编程模型,您无需创建和发送消息。相反,您只需在另一个线程中运行任意复杂的代码。
为什么“特别干净”?
没有需要创建的操作码(消息)。即,更少的代码。
接收端没有用于操作码调度的 switch 语句。即,更少的代码。
由于没有协议,因此无需对消息进行版本控制。即,更少的代码。
这个想法不能跨进程使用,但这可以满足我的需求。
从cpp参考:https : //en.cppreference.com/w/cpp/language/if,看来我不能做到这一点:
if (cond)
{}
else if (init; cond) // <<--- init not allowed with "else if"
{}
Run Code Online (Sandbox Code Playgroud)
我以一种相当愚蠢的方式解决了它:
if (cond)
{}
else if ([]() -> bool
{
init;
if (cond)
{
// Do something in the same scope as 'init'
return true;
}
return false;
}())
{}
Run Code Online (Sandbox Code Playgroud)
我是否在这里缺少有关使用C ++ 17“正确”执行此操作的明显方法?