한 가지 대안은 워크 플로 도구 dask를 사용하는 것입니다. 구문 적으로 재미는 없지만 ...
var
| do this
| then do that
... 변수가 체인 아래로 흐르도록 허용하고 dask를 사용하면 가능한 경우 병렬화의 추가 이점을 얻을 수 있습니다.
dask를 사용하여 파이프 체인 패턴을 수행하는 방법은 다음과 같습니다.
import dask
def a(foo):
return foo + 1
def b(foo):
return foo / 2
def c(foo,bar):
return foo + bar
workflow = {'a_task':(a,1),
'b_task':(b,'a_task',),
'c_task':(c,99,'b_task'),}
dask.get(workflow,'c_task')
엘릭서로 작업 한 후 저는 파이썬에서 파이핑 패턴을 사용하고 싶었습니다. 이것은 정확히 같은 패턴은 아니지만 비슷하고 내가 말했듯이 병렬화의 추가적인 이점이 있습니다. 워크 플로에서 다른 작업에 의존하지 않는 작업을 먼저 실행하도록 dask에 지시하면 병렬로 실행됩니다.
더 쉬운 구문을 원한다면 작업 이름 지정을 처리 할 수있는 것으로 래핑 할 수 있습니다. 물론이 상황에서 파이프를 첫 번째 인수로 사용하려면 모든 함수가 필요하며 패럴 라이 제이션의 이점을 잃게됩니다. 하지만 괜찮다면 다음과 같이 할 수 있습니다.
def dask_pipe(initial_var, functions_args):
'''
call the dask_pipe with an init_var, and a list of functions
workflow, last_task = dask_pipe(initial_var, {function_1:[], function_2:[arg1, arg2]})
workflow, last_task = dask_pipe(initial_var, [function_1, function_2])
dask.get(workflow, last_task)
'''
workflow = {}
if isinstance(functions_args, list):
for ix, function in enumerate(functions_args):
if ix == 0:
workflow['task_' + str(ix)] = (function, initial_var)
else:
workflow['task_' + str(ix)] = (function, 'task_' + str(ix - 1))
return workflow, 'task_' + str(ix)
elif isinstance(functions_args, dict):
for ix, (function, args) in enumerate(functions_args.items()):
if ix == 0:
workflow['task_' + str(ix)] = (function, initial_var)
else:
workflow['task_' + str(ix)] = (function, 'task_' + str(ix - 1), *args )
return workflow, 'task_' + str(ix)
def foo(df):
return df[['a','b']]
def bar(df, s1, s2):
return df.columns.tolist() + [s1, s2]
def baz(df):
return df.columns.tolist()
import dask
import pandas as pd
df = pd.DataFrame({'a':[1,2,3],'b':[1,2,3],'c':[1,2,3]})
이제이 래퍼를 사용하여 다음 구문 패턴 중 하나를 따르는 파이프를 만들 수 있습니다.
이렇게 :
workflow, last_task = dask_pipe(df, [foo, baz])
print(dask.get(workflow, last_task))
workflow, last_task = dask_pipe(df, {foo:[], bar:['string1', 'string2']})
print(dask.get(workflow, last_task))
crime_by_state %>% filter(State=="New York", Year==2005) ...
끝에서 dplyr 내 가장 일반적인 R 관용구를 교체하는 방법 .