spark读取hdfs文件原理
/**获取具有任意输入格式的Hadoop文件的RDD
*
* 因为Hadoop的RecordReader类对每条记录重新使用相同的可写对象,
* 所以直接缓存返回的RDD或直接将其传递给聚合或无序处理操作将创建同一对象的多个引用。
* 如果计划直接缓存、排序或聚合Hadoop可写对象,您应该首先使用“map”函数复制它们。
* @param path 输入文件的目录,路径可以是逗号分隔的路径作为输入列表
* @param inputFormatClass 要读取的数据的存储格式
* @param keyClass map阶段输入的k1
* @param valueClass map阶段输入的v2
* @param minPartitions 生成的RDD的建议最小分区数
* @return 键元组与对应值的RDD
*/
def hadoopFile[K, V](
path: String,
inputFormatClass: Class[_ <: InputFormat[K, V]],
keyClass: Class[K],
valueClass: Class[V],
minPartitions: Int = defaultMinPartitions): RDD[(K, V)] = withScope {
assertNotStopped()
// 这是一个强制加载本地hdfs-site.xml。
// See SPARK-11227 for details.
FileSystem.getLocal(hadoopConfiguration)
// 一个Hadoop配置可以是大约10kb,这是相当大的,所以广播它。(用于executor节省内存)
val confBroadcast = broadcast(new Seri