spark将简单字符串保存到文本文件

时间:2016-06-02 12:13:29

标签: scala apache-spark

我有一个需要存储上次运行到文本文件的spark作业。 这既适用于HDFS,也适用于本地fs(用于测试)。

然而,看起来这似乎并不像看起来那么直接。

我一直在尝试删除目录并获取“无法删除”错误消息。 试图将一个简单的刺痛值存储到数据框中,然后再回到原地。

这一切都令人费解,以至于让我退后一步。

通过覆盖字符串将字符串(在我的情况下最后执行的时间戳)存储到文件中的最佳方法是什么?

修改

我现在使用它的讨厌方式如下:

sqlc.read.parquet(lastExecution).map(t => "" + t(0)).collect()(0)

sc.parallelize(List(lastExecution)).repartition(1).toDF().write.mode(SaveMode.Overwrite).save(tsDir)

1 个答案:

答案 0 :(得分:0)

这听起来像存储简单的应用程序/执行元数据。因此,保存文本文件不需要由“Spark”完成(即,不应该在分布式火花作业中,由工作人员完成)。

您可以将驱动程序代码放在驱动程序代码中,通常是在构建RDD之后。话虽这么说,你不会使用Spark API来做这件事,你宁愿做一些像使用编写器或文件输出流一样简单的事情。这里唯一的问题是你将如何阅读它。假设您的驱动程序在同一台计算机上运行,​​应该没有问题。

如果工作人员在将来的工作中读取此值(这可能是您希望在hdfs中使用的原因),并且您不想直接使用Hadoop API,那么您必须确保只有一个分区,这样你就不会得到多个具有普通值的文件。但是,这不能说是本地存储(它存储在执行任务的工作人员正在运行的机器上),管理它只会过度。

我最好的选择是使用驱动程序并在运行驱动程序的机器上创建文件(假设它与下次使用的相同),或者更好的是将它放在数据库中。如果作业中需要此值,则驱动程序可以简单地通过它。