spark sc.textfile如何详细工作?

时间:2016-03-30 10:45:57

标签: hadoop apache-spark

我想详细了解sc.textfile的工作原理 我在 SparkContext.scala 中找到了文本文件源代码,但它们包含有关调度程序,阶段和任务提交的大量信息。我想要的是sc.textfile如何从hdfs读取文件以及 sc.textfile 如何使用通配符匹配多个文件。
我在哪里可以找到源代码?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

textFile是org.apache.spark.SparkContext类的一种方法 从HDFS,本地文件系统(在所有节点上都可用)或任何文件系统中读取文本文件 支持Hadoop的文件系统URI,并将其作为字符串的RDD返回。

Sc.textFile(path,minpartions)
  

@param支持文件系统上文本文件的路径   @param minPartitions建议生成的RDD的最小分区数    @return文本文件行的RDD

它内部使用hadoopRDD(提供核心功能的RDD,用于读取存储在Hadoop中的数据)

Hadoop Rdd看起来像这样

HadoopRDD(
      sc, //Sparkcontext
      confBroadcast, //A general Hadoop Configuration, or a subclass of it
      Some(setInputPathsFunc),//Optional closure used to initialize any JobConf that HadoopRDD creates.       inputFormatClass,
      keyClass,
      valueClass,
      minPartitions)

在textFile方法中,我们调用一个带有一些硬编码值的hadoopRDD:

HadoopRDD(
      sc, //Sparkcontext
      confBroadcast, //A general Hadoop Configuration, or a subclass of it
      Some(setInputPathsFunc),//Optional closure used to initialize any JobConf that HadoopRDD creates. 
      classOf[TextInputFormat],
      classOf[LongWritable],
      classOf[Text],
      minPartitions)

由于这些硬编码值,我们只能读取文本文件,因此如果我们想要读取任何其他类型的文件,我们使用HadoopRdd。

答案 2 :(得分:0)

核心\ src \ main \ scala \ org \ apache \ spark \ rdd \ HadoopRDD.scala中的计算功能

以下是函数中的一些代码

  var reader: RecordReader[K, V] = null
  val inputFormat = getInputFormat(jobConf)
  HadoopRDD.addLocalConfiguration(new SimpleDateFormat("yyyyMMddHHmm").format(createTime),
   context.stageId, theSplit.index, context.attemptNumber, jobConf)
  reader = inputFormat.getRecordReader(split.inputSplit.value, jobConf, Reporter.NULL)

  // Register an on-task-completion callback to close the input stream.
  context.addTaskCompletionListener{ context => closeIfNeeded() }
  val key: K = reader.createKey()
  val value: V = reader.createValue()