我有一个spark程序(scala)和一个 SparkContext
. 我正在写一些文件 RDD
的 saveAsTextFile
. 在我的本地机器上,我可以使用本地文件路径,它可以与本地文件系统一起工作。在我的集群上,它与hdfs一起工作。
我还想写其他任意文件作为处理的结果。我将它们作为本地计算机上的常规文件写入,但希望它们进入集群上的hdfs。 SparkContext
似乎有一些与文件相关的方法,但它们似乎都是输入而不是输出。
我该怎么做?
我有一个spark程序(scala)和一个 SparkContext
. 我正在写一些文件 RDD
的 saveAsTextFile
. 在我的本地机器上,我可以使用本地文件路径,它可以与本地文件系统一起工作。在我的集群上,它与hdfs一起工作。
我还想写其他任意文件作为处理的结果。我将它们作为本地计算机上的常规文件写入,但希望它们进入集群上的hdfs。 SparkContext
似乎有一些与文件相关的方法,但它们似乎都是输入而不是输出。
我该怎么做?
4条答案
按热度按时间gzjq41n41#
以下是对我最有效的方法(使用spark 2.0):
cygmwpex2#
多亏了marios和kostya,但是从spark将文本文件写入hdfs的步骤很少。
请注意
FSDataOutputStream
,这是一个java序列化的对象输出流,而不是文本输出流。这个writeUTF
方法似乎写明文,但它实际上是一种包含额外字节的二进制序列化格式。bhmjp9jg3#
使用hdfsapi(hadoophdfs.jar),您可以为hdfs路径创建inputstream/outputstream,并使用常规java.io类对文件进行读写。例如:
此代码也可以用于本地文件(更改
hdfs://
至file://
).4ngedf3f4#
将文件写入hdfs的一种简单方法是使用sequencefiles。这里使用的是本机hadoop api,而不是spark提供的api。
下面是一个简单的片段(在scala中):
万一你没有钥匙可以用
NullWritable.class
取而代之的是: