我有一个Spark程序(在Scala中)和一个sparkcontext
。我正在用rdd
的saveastextfile
编写一些文件。在我的本地机器上,我可以使用本地文件路径,它与本地文件系统一起工作。在我的集群上,它与HDFS一起工作。
我还想写其他任意文件作为处理的结果。我在本地计算机上将它们作为常规文件编写,但希望它们进入集群上的HDFS。
sparkcontext
似乎有一些与文件相关的方法,但它们似乎都是输入而不是输出。
我该怎么做?
以下是对我最有效的方法(使用Spark2.0):
val path = new Path("hdfs://namenode:8020/some/folder/myfile.txt")
val conf = new Configuration(spark.sparkContext.hadoopConfiguration)
conf.setInt("dfs.blocksize", 16 * 1024 * 1024) // 16MB HDFS Block Size
val fs = path.getFileSystem(conf)
if (fs.exists(path))
fs.delete(path, true)
val out = new BufferedOutputStream(fs.create(path)))
val txt = "Some text to output"
out.write(txt.getBytes("UTF-8"))
out.flush()
out.close()
fs.close()
多亏了marios和kostya,但是从Spark将文本文件写入HDFS的步骤很少。
// Hadoop Config is accessible from SparkContext
val fs = FileSystem.get(sparkContext.hadoopConfiguration);
// Output file can be created from file system.
val output = fs.create(new Path(filename));
// But BufferedOutputStream must be used to output an actual text file.
val os = BufferedOutputStream(output)
os.write("Hello World".getBytes("UTF-8"))
os.close()
注意,已经建议的fsDataOutputStream
是Java序列化的对象输出流,而不是文本输出流。writeutf
方法看起来是写plaint文本,但它实际上是一种包含额外字节的二进制序列化格式。
我想我有一个相当直截了当的问题。我使用的是托管在Unix机器上的Hadoop集群。并且我需要将ORC文件从这个Hadoop集群传输到Azure BLOB存储。 如果我在承载Hadoop集群的Unix计算机上安装AzCopy,那么我是否能够在HDFS和Azure之间来回传输文件? 有人能帮我解决这个关于AZCOPY的困惑吗?会有很大的帮助。提前道谢。
我是Apache Spark的新手,正在尝试从本地文件系统加载文件。我正在学习Hadoop--这是一本权威的指南书。 下面是我设置的环境变量: 下面是我正在执行的命令: 上面的sc.textfile命令有我本地文件系统的路径,但有一些是如何指向hdfs,对于hdfs,我得到了以下错误: 因此,我认为它将指向我的hdfs文件系统,所以我在hdfs中的“/user/hive/warehouse/rec
我正在开发一个专门用于在HDFS文件系统(位于)上使用Spark的Java程序。我的目标之一是检查HDFS上是否存在路径的文件。在本地调试程序时,我发现无法使用以下代码访问此远程文件 实际上,尝试在本地FS中而不是在HDFS上查找文件。顺便说一句,让前缀使崩溃,而取消它将回答,因为本地不存在。 的适当配置是什么,以使事情在本地和从Hadoop集群执行Java程序时正常工作? 编辑:我最后放弃了,把
问题内容: 使用Apache POI时,我(以编程方式)从MS Word文件获取的字符串与使用MS Word打开文件时看到的文本不同。 使用以下代码时: 输出是一行,其中包含许多“无效”字符(是,“框”)和许多不需要的字符串,例如“ ”,“ ”(“#”为数字),“ ”等。 以下代码“修复”了单行问题,但保留了所有无效字符和不需要的文本: 我不知道我是否使用错误的方法来提取文本,但这就是我在查看PO
问题内容: 我正在探索Spark进行批处理。我正在使用独立模式在本地计算机上运行spark。 我正在尝试使用saveTextFile()方法将Spark RDD转换为单个文件[最终输出],但无法正常工作。 例如,如果我有多个分区,我们如何获得一个文件作为最终输出。 更新: 我尝试了以下方法,但是我得到了空指针异常。 例外是: 此致Shankar 问题答案: 您可以使用方法保存到单个文件中。这样,您
问题内容: 我处理了许多在Python,R以及有时在Matlab之间交换的文本/数据。 我要去的是纯文本文件,但偶尔也使用SQLite来存储数据和从每个程序进行访问(虽然还不是Matlab)。我不像在R中那样在SQL中使用GROUPBY,AVG等,因此我不一定需要数据库操作。 对于此类需要在程序之间交换数据以使用每种语言的可用库的应用程序,是否存在使用哪种数据交换格式/方法(甚至XML,NetCD