Apache spark 如何理解Spark中的这段代码
我需要帮助理解这段代码。我知道输出是10。然而,我想知道为什么。我对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
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