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

如何从pyspark中的RDD中获取值?,pyspark,Pyspark,我有以下代码: files = sc.wholeTextFiles ("file:///data/*/*/") 因此,当我运行上述命令时,我得到: [('file:/data/file.txt', 'Message')] 如何从pyspark中的RDD中获取“消息”部分而不是文件名 我有以下代码: val message = files.map(x = > x._2) 但不起作用。这是您在scala中的做法 rdd = sc.wholeTextFiles("hdfs://names

我有以下代码:

files = sc.wholeTextFiles ("file:///data/*/*/")
因此,当我运行上述命令时,我得到:

[('file:/data/file.txt',  'Message')]
如何从pyspark中的RDD中获取“消息”部分而不是文件名

我有以下代码:

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

但不起作用。

这是您在scala中的做法

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

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

因此,您的代码:

files = sc.wholeTextFiles ("file:///data/*/*/")
创建包含以下表单记录的
rdd

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

message = files.map(lambda x: x[1])
message
现在是另一个仅包含文件内容的
rdd


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

您尝试的代码看起来像scala,但您询问的是python。代码的直接翻译应该是
message=files.map(lambda x,x[1])
,但这似乎是一个XY问题。你想做什么?没错,看起来像scala,但想得到第二个元组。我不需要文件名,只需要消息。如何在pyspark中编写scala代码?我编辑了我的原始注释以添加python代码。我得到了一个“SyntaxError:invalid syntax”,它指向了行中的第一个[可以帮助吗?message=files.map(lambda x:x[1])。这很有效!感谢您的帮助!