একটি বিকল্প সমাধান হ'ল ওয়ার্কফ্লো সরঞ্জাম ড্যাস্ক ব্যবহার করা। যদিও এটি সিন্টেক্সিকভাবে মজাদার নয় ...
var
| do this
| then do that
... এটি এখনও আপনার পরিবর্তনশীলটিকে শৃঙ্খলে নেমে যেতে অনুমতি দেয় এবং ড্যাস্ক ব্যবহার করে যেখানে সম্ভব সেখানে সমান্তরালনের অতিরিক্ত সুবিধা দেয়।
পাইপ-চেইন প্যাটার্নটি সম্পাদন করতে আমি কীভাবে ড্যাস্ক ব্যবহার করি তা এখানে:
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 আমার সবচেয়ে সাধারণ আর বাগধারার প্রতিস্থাপিত ।