spark算子-textFile算子

1.textFile算子源码

1.1.源码

//org.apache.spark.SparkContext
def textFile(
      path: String,
      minPartitions: Int = defaultMinPartitions): RDD[String] = withScope {
   
    assertNotStopped()
    hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
      minPartitions).map(pair => pair._2.toString).setName(path)
  }

1.2.textFile算子参数

path:文本所在路径;HDFS、本地文件系统(在所有节点上可用)或任何hadoop支持的文件系统;
minPartitions :最小分区;默认值根据defaultMinPartitions决定;

1.3.算子逻辑

调用hadoopFile算子生成fileRDD;
将文件路径作为rdd名称;

2.defaultMinPartitions参数

2.1.defaultMinPartitions源码

org.apache.spark.SparkContext
def defaultMinPartitions: Int = math.min(defaultParallelism, 2)

2.1.2.算子逻辑

在defaultParallelism参数值(默认分区参数)和2之间取最小值;

2.2.defaultParallelism算子

2.2.1.源码

//根据taskScheduler.defaultParallelism确定
//org.apache.spark.SparkContext
def defaultParallelism: Int = {
   
    assertNotStopped()
    taskScheduler.defaultParallelism
  }

//org.apache.spark.scheduler.TaskSchedulerImpl
override def defaultParallelism(): Int = backend.defaultParallelism()

//全局配置的spark.default.parallelism参数有值就取参数值
//没有值就根据cpu总核数 vs 2 取大值确定
//org.apache.spark.scheduler.cluster.CoarseGrainedSchedulerBackend
override def defaultParallelism(): Int = {
   
    conf.getInt("spark.default.parallelism", math.max(totalCoreCount.get(), 2))
  }

//全局配置的spark.default.parallelism参数有值就取参数值
//没有值就根据cpu总核数 取值确定
//org.apache.spark.scheduler.local.LocalSchedulerBackend
override def defaultParallelism(): Int =
    scheduler.conf.getInt("spark.default.parallelism", totalCores)

2.2.2.算子逻辑

taskSheduler的默认分区值的设置分2种:
 1. 全局配置的spark.default.parallelism参数有值,就取参数值
 2. 全局配置的spark.default.parallelism参数没有设置
 		集群模式下,在cpu总核数 vs 2之间取最大值
 		local模式下,取cpu总核数;

2.3.defaultMinPartitions参数逻辑

 spark.default.parallelism参数有值为p:
 		当p>2时,defaultMinPartitions=2,即textFile()算子默认最小分区数为2;
 		当p<=2时,defaultMinPartitions=p,即textFile()算子默认最小分区数为p;
 spark.default.parallelism参数无值:
 		集群模式下,defaultMinPartitions=2,即textFile()算子默认最小分区数为2;
 		local模式下,defaultMinPartitions=min(cpu总核数,2);

3.hadoopFile算子

3.1.源码

//org.apache.spark.SparkContext
/**
 1. path: 目录到输入数据文件,路径可以用逗号分隔的路径作为输入列表
 2. InputFormatClass: TextInputFormat; 要读取数据的存储格式
 3. keyClass: LongWritable; 与inputFormatClass参数相关联的键的类
 4. valueClass: Text; 与inputFormatClass参数相关联的值的类
*/
def hadoopFile[K, V](
      path: String
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值