来自R背景,我正在探索朱莉娅的并行可能性。我的目标是复制mcapply(并行应用)
的性能**问题:**
我在一个看起来像这样的数据框的行上迭代一个函数:
for i in 1:_nrow # of my DataFrame
lat1 = Raw_Data[i,"lat1"]
lat2 = Raw_Data[i,"lat2"]
lon1 = Raw_Data[i,"long1"]
lon2 = Raw_Data[i,"long2"]
iata1 = Raw_Data[i,"iata1"]
iata2 = Raw_Data[i,"iata2"]
a[i] = [(iata1::String,iata2::String, trunc(i,2), get_intermediary_points(lat1,lon1,lat2,lon2,j) ) for j in 0:.1:1]
end
现在,作为向并行化迈出的一步,我还可以创建一个匿名函数,它可以完成类似的工作,在我的数据帧的每个块上运行计算:
Raw_Data["selector"] = rand(1:nproc,_nrow) # Define how I split my dataframe. 1 chunck per proc
B = by(Raw_Data,:selector,intermediary_points)
有没有办法通过"来加速计算?#34;?否则,请建议好的替代方案。
谢谢!
注意:这是我的数据框Raw_Data的样子
6x7 DataFrame:
iata1 lat1 long1 iata2 lat2 long2
[1,] 1 "ELH" 0.444616 -1.3384 "FLL" 0.455079 -1.39891
[2,] 2 "BCN" 0.720765 0.0362729 "UFA" 0.955274 0.976218
[3,] 3 "ACE" 0.505053 -0.237426 "VCE" 0.794214 0.215582
[4,] 4 "PVG" 0.543669 2.12552 "LZH" 0.425277 1.91171
[5,] 5 "CDG" 0.855379 0.0444809 "VLC" 0.689233 -0.00835298
[6,] 6 "HLD" 0.858699 2.08915 "CGQ" 0.765906 2.18718
答案 0 :(得分:0)
我弄清楚发生了什么。我没有为所有处理器提供所有输入。
基本上,如果遇到同样的问题:
所有功能都应该在它们前面的@everywhere
所有包也应使用DataFrames声明为@everywhere
所有参数也应该在前面用@everywhere声明 它的
现在,这是很多工作。您可以按照http://julia.readthedocs.org/en/latest/manual/parallel-computing/使用独立的软件包来简化该过程。
干杯。