Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 在apache spark中运行的作业超过预期_Apache Spark_Bigdata_Pyspark - Fatal编程技术网

Apache spark 在apache spark中运行的作业超过预期

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

我正在努力学习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 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
时,它将继续执行其他分区,直到找不到解决方案或不再有分区为止。请纠正我哪里错了。