使用Pyspark在Azure Databricks中拆分函数调用到不同的工作程序节点

时间:2019-06-18 16:17:41

标签: python python-3.x pyspark databricks azure-databricks

我有一个函数说: transform_data(input_df)返回python数据帧

result_list = []
for input_df in list_of_dfs :
    result_list.append(transform_data(input_df))
final_df = pd.concat(results_list)

代码正在 Azure数据块中运行,并且list_of_dfs中大约有10个工作节点和相同数量的输入文件。由于转换功能需要花费大量时间,而且对于每个输入df而言,以串行方式完成都不太可行,因此我想在数据块中的每个工作节点之间分配任务。即,将每个单独的工作程序节点用于单独的函数调用,以使整个过程可以并行发生。

该怎么做?

但是我尝试使用线程池,但这只能在数据块中以串行方式起作用,因为仅使用单个驱动程序/主节点。如何强制每个线程同时在不同的工作程序中运行?

if __name__ == '__main__':
    pool = multiprocessing.pool.ThreadPool(len(list_of_dfs)) 
    result_list= pool.map(transform_data, list_of_dfs )
    pool.close()
    pool.join()
    final_df = pd.concat(result_list)

0 个答案:

没有答案