Apache spark 在apache spark中运行的作业超过预期
我正在努力学习apachespark。这是我试图运行的代码。我正在使用Apache spark 在apache spark中运行的作业超过预期,apache-spark,bigdata,pyspark,Apache Spark,Bigdata,Pyspark,我正在努力学习apachespark。这是我试图运行的代码。我正在使用pysparkapi 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 th
pysparkapi
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)
data=xrange(11000)
xrangeRDD=sc.parallelize(数据,8)
def十(值):
“”“返回值是否小于10。”。
Args:
值(int):一个数字。
返回:
布尔:“value”是否小于10。
"""
如果(值<10):
返回真值
其他:
返回错误
过滤=xrangeRDD.filter(十个)
打印过滤的。收集()
打印过滤。取(8)
print filtered.collect()
将其作为输出[1,2,3,4,5,6,7,8,9]
根据我的理解,已过滤。获取(n)
将从RDD中获取n个元素并打印它
我正在审理两个案件:
1) 给出小于或等于RDD中元素数的n值
2) 给出大于RDD中元素数的n值
我有pyspark应用程序UI
来查看每种情况下运行的作业数。在第一种情况下,只有一个作业运行,而在第二种情况下,有五个作业运行
我不明白为什么会这样。提前谢谢
RDD.take
尝试评估尽可能少的分区
如果您获取(9)
它将获取分区0(作业1)并找到9项,然后愉快地终止
如果您获取(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),就这样
此算法的代码位于中。正如你所看到的,这只是试探法。这通常可以节省一些工作,但在退化的情况下可能会导致不必要的大量工作。感谢您向我解释这一点。我对spark还很陌生,所以这需要一些时间才能完全理解。但我想我已经收到你的答复了。如果有不清楚的地方,请告诉我。如果你想完全理解这一点,我认为源代码是最好的资源。(不过,要有效地使用ApacheSpark,您不必理解这一点!)这是我目前的理解
xrangeRDD
是一个具有8个分区的RDD。当执行collect
操作时,spark将在所有8个分区上运行作业,并形成过滤的RDD。但当我执行take
操作时,它将只在提供所需元素的那个么多分区上运行作业。在第一种情况下,由于所需元素是9
,并由第一个分区完成,所以它停止。但当它们超过9
时,它将继续执行其他分区,直到找不到解决方案或不再有分区为止。请纠正我哪里错了。