怎样才能看出Spark可用的RDD?

时间:2015-12-02 14:09:26

标签: python apache-spark

我刚开始使用Spark。我尝试遵循this教程(我使用Python)。

作为前两句,我看到以下内容:

  

Spark的主要抽象是一个分布式的项目集合   称为弹性分布式数据集(RDD)。 RDD可以从中创建   Hadoop InputFormats(如HDFS文件)或通过转换其他   RDDS。让我们从中的README文件的文本中创建一个新的RDD   Spark源目录

据我所知,Spark已经"访问"分配在属于运行Spark的群集的不同计算机上的项目。这些项目可以想象为文件(或至少可以从文件中获取)。特别是,通过执行以下内容:

textFile = sc.textFile("test.txt")

我们使用" test.txt"文件以创建一个新的"项目"并将其添加到Spark可见(可访问)的项目集中。

我做对了吗如果是这种情况,我怎样才能看到所有"项目"可用于Spark。特别是,我怎么能看到新创建的项目在那里。

ADDED

对于其中一位用户,我不清楚我的意思。所以,我试着澄清一下。在教程中,"分布式项目集合"提到了。所以,有一些"项目"。可以看到哪些物品存在?或者至少存在多少项?我可以在PySpark会话中输入一些东西来获取一些现有的"项目"?

我的术语也有问题。它是一组名为RDD的项目,或者集合中的每个元素(项目)都称为RDD(我所指的句子在这方面是不明确的)。通过执行sc.textFile,我们制作了一个新的RDD。那么,我们在项目集中添加了一个项目?我们可以看到集合中的项目(或至少是集合中的项目数量)。

已添加2

看起来我还不清楚我的意思。我不明白什么是不清楚的。也许那些我的问题不明确的人可以详细说明究竟有什么不清楚。

但无论如何,我尝试更多。

  

Spark的主要抽象是一个分布式的项目集合   称为弹性分布式数据集(RDD)。

如果有一个项目集合,应该有办法获得有关此项目"项目集合的一些信息"。例如,很自然地假设项目集合可以通过集合中的项目数来表征。我能得到这个号码吗?

2 个答案:

答案 0 :(得分:0)

Spark可以读取本地文件系统和HDFS或其他分布式文件系统上的每个文件/目录作为S3。

当您编写sc.textFile时,您正在根据指定的文件/目录的内容创建RDD。特别是,文件/目录的每一行都成为RDD的一个条目。

RDD是集合项目。它是Resilient Distributed Dataset的首字母缩写,即它是在集群节点之间分配的项集合。

例如,如果文件test.txt存储在目录/tmp中的HDFS上,并且它包含行:

one
two
three

通过编写sc.textFile('hdfs://tmp/test.txt')创建一个包含三个字符串的RDD(每行一个)。

希望我的解释是足够的。如果您需要更多详细信息,请询问。

答案 1 :(得分:0)

  

这些项目可以想象为文件(或者至少可以从文件中获取)。

不是真的。我想这里的一个基本问题是理解RDD与实际数据之间的关系。重要的是要注意以下事实:

  • RDD被懒惰地评估。如果在给定的RDD上没有执行任何操作,则不会实现。
  • RDD是一种描述,并不真正包含数据。

涉及一些细微之处,例如,当您并行化本地数据结构并在闭包内捕获数据时,但它并不会真正影响此答案。

致电时:

textFile = sc.textFile("test.txt")
没有真正发生的事。

好吧,它创建了一个Python对象和一个相应的Java对象,但此时文件可能根本不存在。事情变得更加复杂,尤其是使用DataFrames时,Spark可能会访问某些元数据甚至读取整个数据集来推断模式,但我们仍然坚持基础知识。

除非RDD已被缓存并实现,否则没有持久的分布式状态对用户透明,因此除了局部变量之外没有任何内容可以列出。