文件名太复杂和随机,我无法使用api获取。所以我想使用saveAstextfile,因为文件名并不复杂且规则,但我不知道如何在同一目录中追加文件?感谢您抽出时间。
你可以试试我在某处找到的这个方法。处理Spark Streaming rdd并存储到单个HDFS文件
import org.apache.hadoop.fs.{ FileSystem, FileUtil, Path }
def saveAsTextFileAndMerge[T](hdfsServer: String, fileName: String, rdd: RDD[T]) = {
val sourceFile = hdfsServer + "/tmp/"
rdd.saveAsTextFile(sourceFile)
val dstPath = hdfsServer + "/final/"
merge(sourceFile, dstPath, fileName)
}
def merge(srcPath: String, dstPath: String, fileName: String): Unit = {
val hadoopConfig = new Configuration()
val hdfs = FileSystem.get(hadoopConfig)
val destinationPath = new Path(dstPath)
if (!hdfs.exists(destinationPath)) {
hdfs.mkdirs(destinationPath)
}
FileUtil.copyMerge(hdfs, new Path(srcPath), hdfs, new Path(dstPath + "/" + fileName), false, hadoopConfig, null)
}
由于spark使用HDFS,这是它产生的典型输出。您可以使用FileUtil将文件合并回一个文件。这是一个有效的解决方案,因为它不需要spark通过将整个数据划分为1来将其收集到单个内存中。这是我遵循的方法。
import org.apache.hadoop.fs.{FileSystem, FileUtil, Path}
val hadoopConf = sqlContext.sparkContext.hadoopConfiguration
val hdfs = FileSystem.get(hadoopConf)
val mergedPath = "merged-" + filePath + ".json"
val merged = new Path(mergedPath)
if (hdfs.exists(merged)) {
hdfs.delete(merged, true)
}
df.wirte.mode(SaveMode.Append).json(filePath)
FileUtil.copyMerge(hdfs, path, hdfs, merged, false, hadoopConf, null)
您可以使用mergedPath
位置读取单个文件。希望有帮助。
在Spark 1.5上工作过,我认为这是正确的用法...
dataframe.write().mode(SaveMode.Append).format(FILE_FORMAT).**partitionBy**("parameter1", "parameter2").save(path);
问题内容: 至于现在,我将在尝试附加对象时得到提示。我已经在互联网上搜索了一种解决方法。到目前为止,我发现的答案是无法完成。解决此问题的一种方法是将对象写入列表,然后将列表写入文件。 但是,每次添加新对象时,我都必须覆盖该文件。这似乎不是加班的最佳解决方案。 有没有一种方法可以将对象追加到现有对象流? 问题答案: 实际上,这很容易做到。当您添加到现有流时,需要使用ObjectOutStream的子
我正在使用下面的代码。然而,当我运行代码时,我想在同一个TXT文件中一个接一个地添加新的XML。这是否可以使用JDOM。请帮帮我。。 xmlOutput。输出(文档,新FileWriter(“c:\updated.txt”));是否需要修改?
代码是来自ASP.NET MVC应用程序的操作方法。
在Spark中使用Scala时,每当我使用转储结果时,它似乎将输出分成多个部分。我只是向它传递一个参数(路径)。 输出数量是否与其使用的减速器数量相对应 这是否意味着输出被压缩 我知道我可以使用bash将输出组合在一起,但是有没有一个选项可以将输出存储在单个文本文件中,而不进行拆分??我看了API文档,但它并没有说太多
问题内容: 我正在写某种生成加密日志文件的记录器。不幸的是,密码学不是我的强项。现在,我可以向文件写入几条消息,然后关闭文件。然后我可以打开它,附加一些消息,再次关闭,解密后,我在文件中间看到填充字节。有什么方法可以处理加密文件,而不必每次我想添加一些消息时都对其解密? 编辑 :更多细节。当前实现使用CipherOutputStream。据我了解,没有办法 寻求 使用它。如果我将控制输出数据大小可
问题内容: 在Linux中将文本附加到文件的最简单方法是什么? 我看了这个问题,但是可接受的答案使用了一个附加程序(),我相信应该有一个更简单的方法或类似方法。 问题答案: cat >> filename This is text, perhaps pasted in from some other source. Or else entered at the keyboard, doesn’t