apache spark 中超过预期的工作 运行
More than expected jobs running in apache spark
我正在尝试学习 apache-spark。这是我正在尝试 运行 的代码。我正在使用 pyspark api
。
data = xrange(1, 10000)
xrangeRDD = sc.parallelize(data, 8)
def ten(value):
"""Return whether value is below ten.
Args:
value (int): A number.
Returns:
bool: Whether `value` is less than ten.
"""
if (value < 10):
return True
else:
return False
filtered = xrangeRDD.filter(ten)
print filtered.collect()
print filtered.take(8)
print filtered.collect()
将此作为输出 [1, 2, 3, 4, 5, 6, 7, 8, 9]
。
根据我的理解,filtered.take(n)
将从 RDD 中取出 n 个元素并打印出来。
我正在尝试两种情况:-
1)给定n的值小于或等于RDD中的元素个数
2)给定n的值大于RDD中元素的数量
我有 pyspark application UI
来查看每种情况下 运行 的工作数量。在第一种情况下,只有 one job
是 运行ning,但在第二种情况下 five jobs
是 运行ning。
我不明白为什么会这样。提前致谢。
RDD.take
尝试评估尽可能少的分区。
如果你 take(9)
它将获取分区 0(作业 1)找到 9 个项目并愉快地终止。
如果您 take(10)
它将获取分区 0(作业 1)并找到 9 个项目。它还需要一个。由于分区 0 有 9 个,它认为分区 1 可能至少还有一个(作业 2)。但事实并非如此!在 2 个分区中,它找到了 9 个项目。所以到目前为止每个分区 4.5 个项目。该公式将其除以 1.5 表示悲观,并决定 10 / (4.5 / 1.5) = 3 个分区即可。所以它获取分区 2(作业 3)。依然没有。所以到目前为止每个分区 3 个项目,除以 1.5 意味着我们需要 10 / (3 / 1.5) = 5 个分区。它获取分区 3 和 4(作业 4)。没有什么。我们每个分区有 1.8 个项目,10 / (1.8 / 1.5) = 8。它获取最后 3 个分区(作业 5)就是这样。
此算法的代码在 RDD.scala 中。如您所见,它只不过是启发式方法。它通常可以节省一些工作,但在退化的情况下会导致不必要的许多工作。
我正在尝试学习 apache-spark。这是我正在尝试 运行 的代码。我正在使用 pyspark api
。
data = xrange(1, 10000)
xrangeRDD = sc.parallelize(data, 8)
def ten(value):
"""Return whether value is below ten.
Args:
value (int): A number.
Returns:
bool: Whether `value` is less than ten.
"""
if (value < 10):
return True
else:
return False
filtered = xrangeRDD.filter(ten)
print filtered.collect()
print filtered.take(8)
print filtered.collect()
将此作为输出 [1, 2, 3, 4, 5, 6, 7, 8, 9]
。
根据我的理解,filtered.take(n)
将从 RDD 中取出 n 个元素并打印出来。
我正在尝试两种情况:-
1)给定n的值小于或等于RDD中的元素个数
2)给定n的值大于RDD中元素的数量
我有 pyspark application UI
来查看每种情况下 运行 的工作数量。在第一种情况下,只有 one job
是 运行ning,但在第二种情况下 five jobs
是 运行ning。
我不明白为什么会这样。提前致谢。
RDD.take
尝试评估尽可能少的分区。
如果你 take(9)
它将获取分区 0(作业 1)找到 9 个项目并愉快地终止。
如果您 take(10)
它将获取分区 0(作业 1)并找到 9 个项目。它还需要一个。由于分区 0 有 9 个,它认为分区 1 可能至少还有一个(作业 2)。但事实并非如此!在 2 个分区中,它找到了 9 个项目。所以到目前为止每个分区 4.5 个项目。该公式将其除以 1.5 表示悲观,并决定 10 / (4.5 / 1.5) = 3 个分区即可。所以它获取分区 2(作业 3)。依然没有。所以到目前为止每个分区 3 个项目,除以 1.5 意味着我们需要 10 / (3 / 1.5) = 5 个分区。它获取分区 3 和 4(作业 4)。没有什么。我们每个分区有 1.8 个项目,10 / (1.8 / 1.5) = 8。它获取最后 3 个分区(作业 5)就是这样。
此算法的代码在 RDD.scala 中。如您所见,它只不过是启发式方法。它通常可以节省一些工作,但在退化的情况下会导致不必要的许多工作。