背景——我们正在尝试将不同的文件类型(csv或parquet)读入pyspark,我的任务是编写一个程序来确定文件类型。似乎Parquet文件总是目录,Parquet文件在hdfs中显示为目录。我们有一些csv文件也是目录,其中文件名是目录名,目录包含几个部分文件。这是什么过程?为什么有些文件--“文件”和有些文件是“目录”?
sxpgvts31#
硬盘上的所有数据都由文件和文件夹组成。两者的基本区别在于文件存储数据,而文件夹存储文件和其他文件夹。hadoop执行引擎通常会创建一个目录,并根据所使用的缩减器或执行器的数量编写多个部件文件作为输出。当您输入一个输出文件.csv时,并不意味着它是一个包含数据的单一文件。它只是mapreduce(通常)解释为要在其中创建输出文件(零件文件)的新目录的输出位置。如果在编写文件时出现Spark(可能使用 .saveAsTextFile )它可能只创建一个文件。
.saveAsTextFile
mi7gmzs62#
这将取决于生成这些文件的过程。例如,当mapreduce生成输出时,它总是生成一个目录,然后在该目录中为每个reducer创建一个输出文件。这样做是为了使每个减速器都可以独立地创建其输出。从spark的csv包来看,它希望输出到单个文件。因此,单文件csv可能是由spark生成的,而目录是由mapreduce生成的。为了尽可能通用,最好执行以下操作:检查有问题的文件是否是目录。如果没有,检查分机。如果是,请查看目录中文件的扩展名。这应该适用于你的每种情况。请注意,有些输入格式(例如mapreduce输入格式)只接受目录作为输入,有些(例如spark的) textFile )只接受文件/全局文件。您需要了解与之交互的库的期望值。
textFile
2条答案
按热度按时间sxpgvts31#
硬盘上的所有数据都由文件和文件夹组成。两者的基本区别在于文件存储数据,而文件夹存储文件和其他文件夹。
hadoop执行引擎通常会创建一个目录,并根据所使用的缩减器或执行器的数量编写多个部件文件作为输出。
当您输入一个输出文件.csv时,并不意味着它是一个包含数据的单一文件。它只是mapreduce(通常)解释为要在其中创建输出文件(零件文件)的新目录的输出位置。如果在编写文件时出现Spark(可能使用
.saveAsTextFile
)它可能只创建一个文件。mi7gmzs62#
这将取决于生成这些文件的过程。例如,当mapreduce生成输出时,它总是生成一个目录,然后在该目录中为每个reducer创建一个输出文件。这样做是为了使每个减速器都可以独立地创建其输出。
从spark的csv包来看,它希望输出到单个文件。因此,单文件csv可能是由spark生成的,而目录是由mapreduce生成的。
为了尽可能通用,最好执行以下操作:检查有问题的文件是否是目录。如果没有,检查分机。如果是,请查看目录中文件的扩展名。这应该适用于你的每种情况。
请注意,有些输入格式(例如mapreduce输入格式)只接受目录作为输入,有些(例如spark的)
textFile
)只接受文件/全局文件。您需要了解与之交互的库的期望值。