我有这段代码:
files = sc.wholeTextFiles ("file:///data/*/*/")
所以,当我运行上面的命令时,我得到了这个:
[('file:/data/file.txt', 'Message')]
如何抓住“消息”'部分而不是pyspark中此RDD的文件名?
我有这段代码:
val message = files.map(x = > x._2)
但不起作用。
答案 0 :(得分:1)
这就是你在scala中的表现
rdd = sc.wholeTextFiles("hdfs://nameservice1/user/me/test.txt")
rdd.collect.foreach(t=>println(t._2))
答案 1 :(得分:0)
来自pyspark docs,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()
的区别,请访问this post。