hdfs是目录的“文件”

jhiyze9q  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(384)

背景——我们正在尝试将不同的文件类型(csv或parquet)读入pyspark,我的任务是编写一个程序来确定文件类型。
似乎Parquet文件总是目录,Parquet文件在hdfs中显示为目录。
我们有一些csv文件也是目录,其中文件名是目录名,目录包含几个部分文件。这是什么过程?
为什么有些文件--“文件”和有些文件是“目录”?

sxpgvts3

sxpgvts31#

硬盘上的所有数据都由文件和文件夹组成。两者的基本区别在于文件存储数据,而文件夹存储文件和其他文件夹。
hadoop执行引擎通常会创建一个目录,并根据所使用的缩减器或执行器的数量编写多个部件文件作为输出。
当您输入一个输出文件.csv时,并不意味着它是一个包含数据的单一文件。它只是mapreduce(通常)解释为要在其中创建输出文件(零件文件)的新目录的输出位置。如果在编写文件时出现Spark(可能使用 .saveAsTextFile )它可能只创建一个文件。

mi7gmzs6

mi7gmzs62#

这将取决于生成这些文件的过程。例如,当mapreduce生成输出时,它总是生成一个目录,然后在该目录中为每个reducer创建一个输出文件。这样做是为了使每个减速器都可以独立地创建其输出。
从spark的csv包来看,它希望输出到单个文件。因此,单文件csv可能是由spark生成的,而目录是由mapreduce生成的。
为了尽可能通用,最好执行以下操作:检查有问题的文件是否是目录。如果没有,检查分机。如果是,请查看目录中文件的扩展名。这应该适用于你的每种情况。
请注意,有些输入格式(例如mapreduce输入格式)只接受目录作为输入,有些(例如spark的) textFile )只接受文件/全局文件。您需要了解与之交互的库的期望值。

相关问题