【问题标题】:What are the differences between sc.parallelize and sc.textFile?sc.parallelize 和 sc.textFile 有什么区别?
【发布时间】:2017-12-05 06:29:30
【问题描述】:

我是 Spark 的新手。有人可以解决我的疑问吗:

假设下面是我的代码:

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

我希望下面是内部发生的事情:(如果我的理解有误,请纠正)

(1) 变量 a 将被保存为包含预期 txt 文件内容的 RDD 变量

(2) 驱动节点将工作分解为任务,每个任务都包含有关它将操作的数据拆分的信息。 现在这些任务被分配给工作节点。

(3) 当collection action(本例中为collect())被调用时,结果会从不同节点返回给master,并保存为局部变量c。

现在我想了解下面的代码有什么不同:

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

有人可以澄清一下吗?

【问题讨论】:

    标签: apache-spark pyspark rdd


    【解决方案1】:

    (1) 变量a将被保存为RDD变量包含预期的txt文件内容

    (突出显示我的)不是真的。该行仅描述在您执行操作之后会发生什么,即 RDD 变量确实包含预期的 txt 文件内容。

    RDD 描述了分区,当一个动作被调用时,这些分区成为将读取输入文件的部分的任务。

    (2) 驱动节点将工作分解为任务,每个任务都包含有关它将操作的数据拆分的信息。现在这些任务被分配给工作节点。

    是的,但仅当调用您的情况为 c=b.collect() 的操作时。

    (3) 当collection action(本例中为collect())被调用时,结果会从不同节点返回给master,并保存为局部变量c。

    是的!这是在内存方面最危险的操作,因为在集群中运行某处的所有 Spark 执行程序都开始将数据发送回驱动程序。

    现在我想了解下面的代码有什么不同

    引用sc.textFile的文档:

    textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String] 从 HDFS、本地文件系统(在所有节点上可用)或任何 Hadoop 支持的文件中读取文本文件文件系统 URI,并将其作为字符串的 RDD 返回。

    引用sc.parallelize的文档:

    parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: ClassTag[T]): RDD[T] 分发一个本地 Scala 集合以形成一个RDD。

    区别在于数据集 - 文件(textFile)和本地集合(parallelize)。两者都在幕后做同样的事情,即它们都构建了如何访问将要使用转换和操作处理的数据的描述。

    因此,主要区别在于数据的来源。

    【讨论】:

    • 我有一个 rdd,其中包含使用 parallelise 函数获得的文件夹中的文件名列表,我正在使用 foreach 读取 rdd 中的每个文件,然后这些文件将并行在后面,我可以执行并行对每个单独文件进行任何转换..
    • @BARATH 这值得一个单独的问题(并且认为已经问过一个问题 - 搜索 stackoverflow)。只是给你一个,你可以在 Spark 中进行并行和分布式计算,具体取决于每个分区的记录数(在你的情况下是文件)。分区是并行任务。越多并行计算越多。
    • @Jacek Laskowski - sc.textFile() 我明白了。 sc.parallelize() 是如何工作的?该集合是在驱动程序本身中创建的。从此集合创建的 RDD(分区)如何分布到工作节点?分区是否首先分配给工作节点,然后在这些节点上的执行程序上安排任务?或者,个别任务是否有其正确性。当驱动程序中创建的 DAGScheduler->TaskScheduler 打算将任务分发给工作节点上的执行器时,RDD 分区已经捆绑在其中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    相关资源
    最近更新 更多