如何从pyspark中的RDD中获取值?

时间:2018-02-17 22:35:31

标签: pyspark

我有这段代码:

files = sc.wholeTextFiles ("file:///data/*/*/")

所以,当我运行上面的命令时,我得到了这个:

[('file:/data/file.txt',  'Message')]

如何抓住“消息”'部分而不是pyspark中此RDD的文件名?

我有这段代码:

val message = files.map(x = > x._2)

但不起作用。

2 个答案:

答案 0 :(得分:1)

这就是你在scala中的表现

rdd = sc.wholeTextFiles("hdfs://nameservice1/user/me/test.txt")
rdd.collect.foreach(t=>println(t._2))

答案 1 :(得分:0)

来自pyspark docswholeTextFiles()

  

从HDFS读取文本文件目录,本地文件系统(在所有节点上都可用)或任何Hadoop支持的文件系统URI。每个文件都作为单个记录读取,并以键值对的形式返回,其中键是每个文件的路径,值是每个文件的内容。

所以你的代码:

files = sc.wholeTextFiles ("file:///data/*/*/")

创建一个rdd,其中包含以下格式的记录:

(file_name,  file_contents)

获取文件的内容只是一个简单的映射操作,以获取此元组的第二个元素:

message = files.map(lambda x: x[1])

message现在是另一个仅包含文件内容的rdd

有关wholeTextFiles()的更多相关信息及其与textFile()的区别,请访问this post