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
Apache spark 如何理解Spark中的这段代码_Apache Spark_Pyspark - Fatal编程技术网

Apache spark 如何理解Spark中的这段代码

Apache spark 如何理解Spark中的这段代码,apache-spark,pyspark,Apache Spark,Pyspark,我需要帮助理解这段代码。我知道输出是10。然而,我想知道为什么。我对Spark很陌生,我需要在学术考试中学习它。所以我想知道它是如何得到输出的 data_reduce = sc.parallelize([1.0, 2, .5, .1, 5, .2], 1) data_reduce.reduce(lambda x, y: x / y) 在代码的第一行中,我们正在创建一个数据帧 data_reduce = sc.parallelize([1.0, 2, .5, .1, 5, .2], 1) # 1

我需要帮助理解这段代码。我知道输出是10。然而,我想知道为什么。我对Spark很陌生,我需要在学术考试中学习它。所以我想知道它是如何得到输出的

data_reduce = sc.parallelize([1.0, 2, .5, .1, 5, .2], 1)
data_reduce.reduce(lambda x, y: x / y)

在代码的第一行中,我们正在创建一个数据帧

data_reduce = sc.parallelize([1.0, 2, .5, .1, 5, .2], 1) # 1 partition
在上面的代码中

SC:SC是我们在这里使用的spark上下文变量。在执行spark shell时,spark shell自动提供sc变量。但对于其他非spark shell应用程序,您必须创建另一个sc变量。 sc就像你们程序的入口点。SparkContext已创建。您可以使用它创建RDD、累加器和广播变量,访问Spark服务和运行作业

并行化:有多种方法可以在spark中创建rdd。加载文件、从表加载数据的示例类似地使用并行化函数,您可以通过传递数组和列表等集合来创建dataframe。请参见下面的示例

val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)
data_reduce:这是您创建的RDD,分布式数据集(data_reduce)可以并行操作

第二行代码

data_reduce.reduce(lambda x, y: x / y)
这里我们在RDD中调用reduce函数。在这里的示例中,我们对RDD中的所有元素进行累积求和。我希望您了解RDD中的分区概念。然后我们知道我们的数据以分区的形式分布在不同的节点上

[1.0, 2, .5, .1, 5, .2]
假设它分布在两个分区中

那就好像

分区1:[1.0,2,5] 分区2:[1,5,2]

现在,将在每个分区上调用reduce函数

这里reduce方法接受一个
函数(acum,n)=>(acum+n)
。此函数使用默认整数值0初始化累加器(accum)变量,每次调用reduce方法时分割一个元素,并在处理RDD X的所有元素时返回最终值。它返回最终值,而不是另一个RDD

好的,让我们了解一下reduce是如何工作的

  • 步骤1:[1.0,2,5,1,5,2]。减少(λx,y:x/y) 这里x=1.0,y=2,因此x/y=0.5

  • 步骤2:现在0.5将存储在x中,y将是来自
    rdd 因此x=0.5,y=0.5,因此x/y=1

  • 步骤3:同样,现在x=1,y=0.1,因此x/y=10

  • 步骤4:x=10,y=5,因此x/y=2

  • 步骤5:x=2,y=0.2所以x/y=10
所以10是你的最终答案,我希望我现在能澄清你:)

您可以从中阅读有关reduce函数的更多详细信息