我有一个关于使用Spark处理位于HDFS中的非结构化文件的问题。
让我们说在这种情况下,我们有很多文件位于一个HDFS文件夹中。因此,Spark应用程序将读取该特定HDFS文件夹中的所有文件并对其进行处理。我的问题是,如果我们使用以下代码来读取文件并将其放在DataFrame中,如果HDFS文件夹包含大量文件且每个文件都有巨大的大小,则可能会出现内存不足问题:
df = spark.read.text('/user/tester/datafiles')
我们处理HDFS文件的最佳做法或方法是什么,如上面的方案?是我们需要逐个文件循环并处理它而不是一次读取所有文件?
感谢。
答案 0 :(得分:0)
很少有人理解
1)spark.read.text是一个转换。它不会触发数据读取。
2)将数据转换为DataFrame的操作也可以是转换。因此可以避免数据加载。
3)最后,如果你执行某些操作,可以说count()。
现在,正如#Akash已经说过的那样,对于HDFS,文件已经存储在块中。 spark的默认分区在每个块的rdd中创建一个分区。所以任何一点,只会加载几个块进行处理。