gpt4 book ai didi

apache-spark - spark-csv 不会将 DataFrame 保存到文件时是否有解释?

转载 作者:行者123 更新时间:2023-12-02 00:50:02 31 4
gpt4 key购买 nike

dataFrame.coalesce(1).write().save("path")有时即使在非空输入上也只写入 _SUCCESS 和 ._SUCCESS.crc 文件而没有预期的 *.csv.gz DataFrame
文件保存代码:

private static void writeCsvToDirectory(Dataset<Row> dataFrame, Path directory) {
dataFrame.coalesce(1)
.write()
.format("csv")
.option("header", "true")
.option("delimiter", "\t")
.option("codec", "org.apache.hadoop.io.compress.GzipCodec")
.mode(SaveMode.Overwrite)
.save("file:///" + directory);
}


文件获取代码:

static Path getTemporaryCsvFile(Path directory) throws IOException {
String glob = "*.csv.gz";
try (DirectoryStream<Path> stream = Files.newDirectoryStream(directory, glob)) {
return stream.iterator().next();
} catch (NoSuchElementException e) {
throw new RuntimeException(getNoSuchElementExceptionMessage(directory, glob), e);
}
}

文件获取错误示例:

java.lang.RuntimeException: directory /tmp/temp5889805853850415940 does not contain a file with glob *.csv.gz. Directory listing:
/tmp/temp5889805853850415940/_SUCCESS,
/tmp/temp5889805853850415940/._SUCCESS.crc

我依靠这种期望,有人能解释一下为什么它会这样工作吗?

最佳答案

Output file should (must by logic) contain at least the header line and some data lines. But he does not exist at all



这个评论有点误导。根据 Github 上的代码,只有当 Dataframe 为空时才会发生这种情况,并且不会产生 SUCCESS文件。考虑到这些文件存在 - Dataframe 不为空且 writeCsvToDirectory从你的代码被触发。

我有一些问题:
  • 您的 Spark 作业是否顺利完成?
  • 时间戳是否为SUCCESS文件更新了?

  • 我的两个主要嫌疑人是:
  • coalesce(1) - 如果您有大量数据,这可能会失败
  • SaveMode.Overwrite - 我有一种感觉,那些 SUCCESS 文件在以前运行的那个文件夹中
  • 关于apache-spark - spark-csv 不会将 DataFrame 保存到文件时是否有解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406465/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com