Hun*_*nle 7 apache-spark rdd pyspark
在spark版本1.5.1中保存为文本文件时,我使用: rdd.saveAsTextFile('<drectory>')
.
但是,如果我想在该目录中找到该文件,我该如何命名它我想要的?
目前,我认为它是命名的part-00000
,必须是默认的.我该如何命名?
小智 8
这个问题的正确答案是saveAsTextFile
不允许您命名实际文件.
这样做的原因是数据被分区并在作为调用参数给出的路径中saveAsTextFile(...)
,它将其视为目录,然后为每个分区写入一个文件.
你可以打电话 rdd.coalesce(1).saveAsTextFile('/some/path/somewhere')
,它会创建/some/path/somewhere/part-0000.txt
.
如果你需要比这更多的控制,你需要在你做完后进行实际的文件操作rdd.collect()
.
请注意,这会将所有数据拉入一个执行程序,因此您可能会遇到内存问题.这就是你冒的风险.
正如我在上面的评论中所说,可以在此处找到带有示例的文档.并引用方法的描述saveAsTextFile
:
使用元素的字符串表示将此RDD保存为文本文件.
在下面的示例中,我将一个简单的RDD保存到文件中,然后加载它并打印其内容.
samples = sc.parallelize([
("abonsanto@fakemail.com", "Alberto", "Bonsanto"),
("mbonsanto@fakemail.com", "Miguel", "Bonsanto"),
("stranger@fakemail.com", "Stranger", "Weirdo"),
("dbonsanto@fakemail.com", "Dakota", "Bonsanto")
])
print samples.collect()
samples.saveAsTextFile("folder/here.txt")
read_rdd = sc.textFile("folder/here.txt")
read_rdd.collect()
Run Code Online (Sandbox Code Playgroud)
输出将是
('abonsanto@fakemail.com', 'Alberto', 'Bonsanto')
('mbonsanto@fakemail.com', 'Miguel', 'Bonsanto')
('stranger@fakemail.com', 'Stranger', 'Weirdo')
('dbonsanto@fakemail.com', 'Dakota', 'Bonsanto')
[u"('abonsanto@fakemail.com', 'Alberto', 'Bonsanto')",
u"('mbonsanto@fakemail.com', 'Miguel', 'Bonsanto')",
u"('stranger@fakemail.com', 'Stranger', 'Weirdo')",
u"('dbonsanto@fakemail.com', 'Dakota', 'Bonsanto')"]
Run Code Online (Sandbox Code Playgroud)
我们来看看使用基于Unix的终端.
usr@host:~/folder/here.txt$ cat *
('abonsanto@fakemail.com', 'Alberto', 'Bonsanto')
('mbonsanto@fakemail.com', 'Miguel', 'Bonsanto')
('stranger@fakemail.com', 'Stranger', 'Weirdo')
('dbonsanto@fakemail.com', 'Dakota', 'Bonsanto')
Run Code Online (Sandbox Code Playgroud)