gpt4 book ai didi

python - 我对 Spark 中并行操作的理解是否正确?

转载 作者:太空狗 更新时间:2023-10-29 20:30:24 24 4
gpt4 key购买 nike

我是 Spark 的新手,正在尝试用 Python 理解 Spark 的概念。在使用 Python 为 Spark 开发应用程序时,我对以并行方式处理数据的方式感到有点困惑。

1。每个人都说我不需要担心在处理封装在 RDD 变量中的数据时会涉及到哪个节点和多少个节点。因此,根据我的最佳理解,我相信 Spark 集群会对以下代码执行的操作:

a = sc.textFile(filename)
b = a.filter(lambda x: len(x) > 0 and x.split("\t").count("9999-12-31") == 0)
c = b.collect()

可以描述为以下步骤:

(1) 变量a会被保存为一个RDD变量,包含预期的txt文件内容
(2)不同RDD a 的 block 将被广播到集群中的不同节点,并且将对不同节点中的每个 block 进行过滤方法
(3) 当收集操作被调用时,结果会从不同节点返回给master,并保存为局部变量c

我的描述对吗?如果没有,具体程序是什么?如果我是对的,那么并行化方法有什么意义呢?下面的代码是否经历了与上面列出的相同的事情?

a = sc.textFile(filename).collect()
b = sc.parallelize(a).filter(lambda x: len(x)>0 and x.split("\t").count("9999-12-31"))
c = b.collect()

2。对于下面的代码,SQL查询语法会不会把定义好的表分成很多分区来并行处理?

a = sc.textFile(filename)
b = a.filter(lambda x: len(x) > 0 and x.split("\t").count("9999-12-31") == 0)
parts = b.map(lambda x: x.split("\t"))
records = parts.map(Row(r0 = str(x[0]), r1 = x[1], r2 = x[2]))
rTable = sqlContext.createDataFrame(records)
rTable.registerTempTable("rTable")
result = sqlContext.sql("select substr(r0,1,2), case when r1=1 then r1*100 else r1*10 end, r2 from rTable").collect()

最佳答案

您对第一步的描述是正确的。但是第二步和第三步还有更多内容。

第二步:

根据 Spark 文档:

def textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String]

The textFile method also takes an optional second argument for controlling the number of partitions of the file. By default, Spark creates one partition for each block of the file (blocks being 64MB by default in HDFS), but you can also ask for a higher number of partitions by passing a larger value.

如果您将文件放在 HDFS 中并将其路径作为 textFile 参数传递,则 RDD a 的分区将基于 HDFS block 创建。所以在这种情况下,腭化的数量取决于 HDFS block 的数量。此外,数据已经分区并通过 HDFS 移动到集群机器。

如果您使用本地文件系统上的路径(在所有节点上可用)并且未指定 minPartitions,则选择默认并行度(取决于集群中的核心数)。在这种情况下,您必须将文件复制到每个工作人员或将其放入每个工作人员都可以使用的共享存储中。

在每种情况下,Spark 都避免广播任何数据,而是尝试使用每台机器中的现有 block 。所以你的第二步并不完全正确。

第三步

根据 Spark 文档:

collect(): Array[T] Return an array that contains all of the elements in this RDD

在这一步中,您的 RDD b 被混洗/收集到您的驱动程序/节点中。

关于python - 我对 Spark 中并行操作的理解是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32815916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com