HDFS "files" 是目录

HDFS "files" that are directories

背景——我们正在尝试将不同的文件类型(csv 或 parquet)读入 pyspark,我的任务是编写一个程序来确定文件类型。

看来parquet文件总是目录,parquet文件在HDFS中以目录的形式出现。

我们有一些csv文件也是目录,文件名就是目录名,目录包含几个part文件。这是什么过程?

为什么有些文件是 --'files' 而有些文件是 'directories'?

这将取决于生成这些文件的进程。例如,当 MapReduce 产生输出时,它总是产生一个目录,然后在该目录中为每个 reducer 创建一个输出文件。这样做是为了让每个减速器都可以独立创建其输出。

从Spark的CSV package来看,它期望输出到单个文件。因此,也许单文件 CSV 由 Spark 生成,而目录由 MapReduce 生成。

为了尽可能通用,执行以下操作可能是个好主意:检查相关文件是否为目录。如果没有,请检查扩展名。如果是,请查看目录内文件的扩展名。这应该适用于您的每种情况。

请注意,某些输入格式(例如 MapReduce 输入格式)将 接受目录作为输入,而某些(例如 Spark 的 textFile)将仅接受 files/globs 个文件。您需要了解与您交互的库的预期内容。

All the data on your hard drive consists of files and folders. The basic difference between the two is that files store data, while folders store files and other folders.

Hadoop 执行引擎通常会创建一个目录,并根据使用的 reducer 或 executor 的数量写入多个部分文件作为输出。

当你有多个输出文件时 abc.csv 这并不意味着它是一个包含数据的文件。它只是 MapReduce(通常)解释为要创建的新目录的输出位置,它在其中创建输出文件(部分文件)。 在 Spark 的情况下,当您正在编写文件时(可能使用 .saveAsTextFile),它可能只会创建一个文件。