为什么 pyspark 做 np.array 的迭代计算每个 task 运行速度与分配的 core 成反比?

问答 妞妞 ⋅ 于 2019-09-23 17:59:19 ⋅ 最后回复由 青牛 2019-09-24 13:48:21 ⋅ 75 阅读

我想把rdd的每一块数据转化为np.array,然后进行迭代计算。对rdd先glom,然后再map。(data_rdd.glom().map(func)) func为迭代函数

python中矩阵计算是并行的,我top了一下,在python下,矩阵计算时大概会调用4个cup。
在pyspark中,我测试了一下,如果每个节点只起一个executor,每个executor只配分一个core的话,完成一个map迭代大概需要花费10s。
我使用4核8线程电脑进行spark并行,为什么如果一个节点起一个executor,然后分配2个core,那么每个map完成时间大概在20s,分配3个core,每个map完成时间就在30s以上,以此类推?(我查看cup符合,一个core时,大概有4个cup满负荷,2个core及以上,那么基本8个cup就都满负荷工作了。这样看来,2cores时,完成一个map不应该跟分配1core时差不多的效率吗)

成为第一个点赞的人吧 :bowtie:
回复数量: 1
  • 青牛 国内首批大数据从业者,就职于金山,担任大数据团队核心研发工程师
    2019-09-24 13:48:21

    pyspark的本质是local运算的 我不太清楚你说的矩阵并行是自己写的 还是调用python现成的 自己写的话应该不会有问题 调用现成的有问题 因为会在每个节点上本地上运行 并没有并行

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter