如何从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])。这很有效!感谢您的帮助!