【发布时间】:2017-10-10 12:06:36
【问题描述】:
我习惯用 Python 编程。我的公司现在有了一个安装了 Jupyter 的 Hadoop 集群。到目前为止,我从未将 Spark / Pyspark 用于任何事情。
我可以像这样简单地从 HDFS 加载文件:
text_file = sc.textFile("/user/myname/student_grades.txt")
我可以这样写输出:
text_file.saveAsTextFile("/user/myname/student_grades2.txt")
我想要实现的目标是使用一个简单的“for 循环”逐个读取文本文件并将其内容写入一个 HDFS 文件。所以我尝试了这个:
list = ['text1.txt', 'text2.txt', 'text3.txt', 'text4.txt']
for i in list:
text_file = sc.textFile("/user/myname/" + i)
text_file.saveAsTextFile("/user/myname/all.txt")
所以这适用于列表的第一个元素,但随后给了我这个错误消息:
Py4JJavaError: An error occurred while calling o714.saveAsTextFile.
: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory
XXXXXXXX/user/myname/all.txt already exists
为避免混淆,我将 IP 地址“模糊”为 XXXXXXXX。
这样做的正确方法是什么?
我将拥有大量数据集(例如'text1'、'text2' ...),并希望在将它们保存到 HDFS 之前对它们中的每一个执行 python 函数。但我希望将结果全部放在“一个”输出文件中。
非常感谢!
MG
编辑: 看来我的最终目标并不是很明确。我需要分别对每个文本文件应用一个函数,然后我想将输出附加到现有的输出目录。像这样的:
for i in list:
text_file = sc.textFile("/user/myname/" + i)
text_file = really_cool_python_function(text_file)
text_file.saveAsTextFile("/user/myname/all.txt")
【问题讨论】:
标签: python apache-spark hdfs pyspark-sql