spark将数据从一个map函数传递到另一个map函数

时间:2017-10-24 17:03:04

标签: apache-spark

我的火花工作流程中有2个步骤

第一个函数采用RDD并吐出数字的平方。

输入: - [1,2,3,4,5]

第一步输出: - [1,4,9,16,25]

rdd = spark.sparkContext.parallelize([1,2,3,4,5],2) 
rdd = rdd.map(square_func)  # call the image_chunk_func

def square_func(x):     return x * x

我的第二步应该基本上取步骤1的输出并找到cuberoot。

如何收集步骤1的输出并将其传递给第2步。

我应该rdd.collect并吐进第2步吗?

用于执行多个地图功能的Python函数。

>>> rdd = sc.parallelize([1,2,3,4,5])
>>> result = rdd.map(sqr).map(cubex)
>>> rdd.collect()
[1, 2, 3, 4, 5]

1 个答案:

答案 0 :(得分:2)

您可以向现有计算图添加另一个转换:

scala> val rdd = sc.parallelize(List(1.0, 2.0, 3.0))

scala> val cbrtRdd = rdd.map(square).map(math.cbrt)

直到这一点,不会发生任何操作。如果执行操作,则只声明要执行的操作。

collectsave是行动的示例。它们执行指定的操作并将结果收集到驱动程序内存中或分别写入磁盘。

scala> cbrtRdd.collect
res8: Array[Double] = Array(1.0, 1.5874010519681996, 2.080083823051904)

您可能会发现在Spark中阅读有关转换和操作的信息很有用。

(我已经使用scala进行这些操作,但概念仍然存在)