Python,Dask-使用其他模块中的函数并映射到Dask Dataframe

时间:2020-05-20 22:48:11

标签: python python-3.x pandas dask dask-dataframe

我正在尝试使用map_partitions将大量函数应用于快速数据帧。该函数在本地定义时起作用,例如:

#assume a data frame df1

def upper(x):
    return x.str.upper()

def process(df,info): 
    for mapper,col in info['process']:
        df[col] = df[col].map_partitions(mapper, meta=df[col])
    return df

info = {'process':[(upper, 'column_name')]}
df = process(df1, info)

df.head()

但是当我们将代码拆分为模块时,它不起作用。

helper.py

def upper(x):
    return x.str.upper()

def upper_lambda():
    return lambda x: x.str.upper()

main.py

import helper

#assume a data frame df1

def process(df,info): 
    for mapper,col in info['process']:
        df[col] = df[col].map_partitions(mapper, meta=df[col])
    return df

info = {'process':[(getattr(helper,'upper'), 'column_name')]}
#Tried with the lambda too.. dosent seem to work 
#info = {'process':[(helper.upper(), 'column_name')]}

df = process(df1, info)

df.head()

它只是抛出KilledWorker :(“('('assign-read-parquet-head-1-5-assign-77bd7b855e5e8eec82312c65361fc7c5',0)”,

1 个答案:

答案 0 :(得分:1)

Dask当然支持使用其他模块中的功能。但是,这些模块应该在您使用的所有计算机上都存在。

对于像<header class="header"> <div class="container"> <nav class="nav"> <div class="hamburger-menu"> <i class="fas fa-bars"></i> <i class="fas fa-times"></i> </div> <ul class="nav-list"> <li class="nav-item"> <a href="index.html" class="nav-link">Home</a> </li> <li class="nav-item"> <a href="#" class="nav-link">About</a> </li> <li class="nav-item"> <a href="#" class="nav-link">Offers</a> </li> <li class="nav-item"> <a href="#" class="nav-link">News</a> </li> <li class="nav-item"> <a href="#" class="nav-link">Contact</a> </li> </ul> </nav> </div> </header>文件这样的小文件,您可能需要研究helper.py来帮助您进行移动。