apache-spark - sc.parallelize 和 sc.textFile 有什么区别?

标签 apache-spark pyspark rdd

我是 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() 

有人可以澄清一下吗?

最佳答案

(1) variable a will be saved as a RDD variable containing the expected txt file content



(突出显示我的)不是真的。线刚描述 会发生什么你执行一个 Action ,即 RDD 变量做 不是 包含预期的 txt 文件内容。

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

(2) The driver node breaks up the work into tasks and each task contains information about the split of the data it will operate on. Now these Tasks are assigned to worker nodes.



是的,但仅当调用了 c=b.collect() 的操作时在你的情况下。

(3) when collection action (i.e collect() in our case) is invoked, the results will be returned to the master from different nodes, and saved as a local variable c.



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

Now I want to understand what difference below code makes



引用 sc.textFile 的文档:

textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String] Read a text file from HDFS, a local file system (available on all nodes), or any Hadoop-supported file system URI, and return it as an RDD of Strings.



引用 sc.parallelize 的文档:

parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: ClassTag[T]): RDD[T] Distribute a local Scala collection to form an RDD.



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

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

关于apache-spark - sc.parallelize 和 sc.textFile 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44860973/

相关文章:

csv - 如何使用 PySpark 从日常文件中加载滚动窗口?

Python worker 连接失败

python - Spark 中的协同过滤

python - 如何修复pyspark中的 'Container exited with a non-zero exit code 143'错误

scala - 如何使用 Spark-Scala 从网络下载 CSV 文件?

java - Apache Spark - 内存异常错误 - IntelliJ 设置

scala - 在 Spark 中,在所有工作人员上拥有静态对象的正确方法是什么?

java - Spark - 使用 OpenCSV 解析文件的序列化问题

apache-spark - Apache Spark:按键将RDD对拆分为多个RDD以保存值

java - Spring 进行 Spark 作业注入(inject)