Joe*_*Joe 9 hadoop scala apache-spark
我有一个Spark程序(在Scala中)和一个SparkContext.我写了一些文件RDD的saveAsTextFile.在我的本地计算机上,我可以使用本地文件路径,它可以与本地文件系统一起使用.在我的群集上,它适用于HDFS.
我还想编写其他任意文件作为处理结果.我在本地计算机上将它们写为常规文件,但希望它们在群集上进入HDFS.
SparkContext 似乎有一些与文件相关的方法,但它们似乎都是输入而不是输出.
我该怎么做呢?
Joe*_*Joe 11
感谢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()
Run Code Online (Sandbox Code Playgroud)
请注意,FSDataOutputStream已建议的是Java序列化对象输出流,而不是文本输出流.该writeUTF方法似乎写了plaint文本,但它实际上是一个包含额外字节的二进制序列化格式.
以下是最适合我的方法(使用Spark 2.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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19150 次 |
| 最近记录: |