एक वैकल्पिक समाधान वर्कफ़्लो टूल dask का उपयोग करना होगा। हालांकि यह उतना मज़ेदार नहीं है जितना ...
var
| do this
| then do that
... यह अभी भी आपके चर को श्रृंखला के नीचे प्रवाहित करने की अनुमति देता है और डस्क का उपयोग करके समानांतरकरण का जोड़ा लाभ देता है जहां संभव हो।
यहां बताया गया है कि मैं पाइप-चेन पैटर्न को पूरा करने के लिए 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')
अमृत के साथ काम करने के बाद मैं पायथन में पाइपिंग पैटर्न का उपयोग करना चाहता था। यह बिल्कुल वैसा ही पैटर्न नहीं है, लेकिन यह समान है और जैसा मैंने कहा, समानांतरकरण के अतिरिक्त लाभ के साथ आता है; यदि आप अपने वर्कफ़्लो में एक कार्य प्राप्त करने के लिए कहते हैं जो दूसरों को पहले चलाने के लिए निर्भर नहीं है, तो वे समानांतर में चलेंगे।
यदि आप आसान वाक्यविन्यास चाहते थे तो आप इसे किसी ऐसी चीज में लपेट सकते हैं जो आपके लिए कार्यों के नामकरण का ध्यान रखे। बेशक इस स्थिति में आपको पहले तर्क के रूप में पाइप को लेने के लिए सभी कार्यों की आवश्यकता होगी, और आप लंबन के किसी भी लाभ को खो देंगे। लेकिन अगर आप इसके साथ ठीक हैं तो आप ऐसा कुछ कर सकते हैं:
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 मेरे सबसे आम आर मुहावरों को बदल दिया ।