Spark从外部读取数据之textFile

textFile函数

/**
   * Read a text file from HDFS, a local file system (available on all nodes), or any
   * Hadoop-supported file system URI, and return it as an RDD of Strings.
   */
  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)
  }
分析参数:

path: String 是一个URI,這个URI可以是HDFS、本地文件(全部的节点都可以),或者其他Hadoop支持的文件系统URI返回的是一个字符串类型的RDD,也就是是RDD的内部形式是Iterator[(String)]

minPartitions=  math.min(defaultParallelism, 2) 是指定数据的分区,如果不指定分区,当你的核数大于2的时候,不指定分区数那么就是 2

当你的数据大于128M时候,Spark是为每一个快(block)创建一个分片(Hadoop-2.X之后为128m一个block)

1、从当前目录读取一个文件

val path = "Current.txt"  //Current fold file
val rdd1 = sc.textFile(path,2)

从当前目录读取一个Current.txt的文件

2、从当前目录读取多个文件

val path = "Current1.txt,Current2.txt,"  //Current fold file
val rdd1 = sc.textFile(path,2)
从当前读取两个文件,分别是Cuttent1.txt和Current2.txt


3、从本地系统读取一个文件

val path = "file:///usr/local/spark/spark-1.6.0-bin-hadoop2.6/README.md"  //local file
val rdd1 = sc.textFile(path,2)
从本地系统读取一个文件,名字是README.md

4、从本地系统读取整个文件夹

val path = "file:///usr/local/spark/spark-1.6.0-bin-hadoop2.6/licenses/"  //local file
val rdd1 = sc.textFile(path,2)
从本地系统中读取licenses这个文件夹下的所有文件

這里特别注意的是,比如這个文件夹下有35个文件,上面分区数设置是2,那么整个RDD的分区数是35*2?

這是错误的,這个RDD的分区数不管你的partition数设置为多少时,只要license這个文件夹下的這个文件a.txt

(比如有a.txt)没有超过128m,那么a.txt就只有一个partition。那么就是说只要这35个文件其中没有一个超过

128m,那么分区数就是 35个

5、从本地系统读取多个文件

val path = "file:///usr/local/spark/spark-1.6.0-bin-hadoop2.6/licenses/LICENSE-scala.txt,file:///usr/local/spark/spark-1.6.0-bin-hadoop2.6/licenses/LICENSE-spire.txt"  //local file
val rdd1 = sc.textFile(path,2)
从本地系统中读取file:///usr/local/spark/spark-1.6.0-bin-hadoop2.6/licenses/下的LICENSE-spire.txt和

LICENSE-scala.txt两个文件。上面分区设置是2,那个RDD的整个分区数是2*2

6、从本地系统读取多个文件夹下的文件(把如下文件全部读取进来)



val path = "/usr/local/spark/spark-1.6.0-bin-hadoop2.6/data/*/*"  //local file
val rdd1 = sc.textFile(path,2)

采用通配符的形式来代替文件,来对数据文件夹进行整体读取。但是后面设置的分区数2也是可以去除的。因为一个文件没有达到128m,所以上面的一个文件一个partition,一共是20个。

7、采用通配符,来读取多个文件名类似的文件

比如读取如下文件的people1.txt和people2.txt,但google.txt不读取


for (i <- 1 to 2){
      val rdd1 = sc.textFile(s"/root/application/temp/people$i*",2)
    }
8、采用通配符读取相同后缀的文件

val path = "/usr/local/spark/spark-1.6.0-bin-hadoop2.6/data/*/*.txt"  //local file
val rdd1 = sc.textFile(path,2)


9、从HDFS读取一个文件
val path = "hdfs://master:9000/examples/examples/src/main/resources/people.txt"
val rdd1 = sc.textFile(path,2)
从HDFS中读取文件的形式和本地上一样,只是前面的路径要表明是HDFS中的








  • 62
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: Spark中的textFile函数可以用来读取文本文件。它可以接受一个文件路径作为参数,并返回一个RDD对象,其中每个元素都是文件中的一行文本。例如,以下代码可以读取一个名为“input.txt”的文本文件: val lines = sc.textFile("input.txt") 其中,sc是SparkContext对象,需要在程序中先创建。读取完成后,可以对RDD对象进行各种操作,例如过滤、映射、聚合等。 ### 回答2: SparkTextFile方法是用于读取文本文件的函数。使用这个方法,我们可以轻松地从本地文件系统或分布式文件系统中读取文本文件,并将其转换为RDD。 在Spark中,我们可以使用TextFile方法来读取文本文件,这个方法接受一个参数,即文件的路径。文件的路径可以是本地文件系统的路径,也可以是分布式文件系统(如HDFS)的路径。 当我们调用TextFile方法时,Spark会将文本文件加载到集群中,并将其分成多个分区。每个分区都包含文件中的一部分数据,可以并行处理。分区的数量通常由文件的大小和集群的计算能力决定。 读取文本文件后,我们可以对RDD执行各种转换和操作,如筛选、映射、聚合等。这些操作可以通过RDD的各种转换函数来实现,如Filter、Map、Reduce等。 此外,我们还可以在读取文本文件时指定一些可选的参数,如文件的格式、编码方式等。例如,我们可以通过设置TextFile的第二个参数来指定文件的格式,如TextFile("file.txt", "com.databricks.spark.csv"),这样就可以读取CSV格式的文件。 总而言之,SparkTextFile方法是一个非常方便的函数,可以帮助我们轻松地读取文本文件,并进行各种数据处理和分析。无论是在本地环境还是分布式环境中,TextFile都是一个非常常用的读取文件的方法。 ### 回答3: SparktextFile函数是用来读取文本文件的。它支持读取本地文件系统,也可以读取分布式文件系统(如HDFS)中的文件。 textFile函数的用法如下: val rdd = sc.textFile("file:///path/to/file") 其中,sc是SparkContext对象,"file:///path/to/file"是要读取的文件路径。如果是在本地文件系统中,则file://可以省略,直接写路径即可。 textFile函数会将文本文件读取为一个RDD(弹性分布式数据集)。每一行文本都会作为RDD中的一个元素,文件中的每一行都会作为RDD中的一个分区(partition)。如果文件很大,Spark会自动将文件进行切片并以分区的形式在集群中并行处理。 读取文件后,可以对RDD进行各种转换和操作。例如,可以使用map、filter、count等函数对每一行文本进行处理和统计。此外,还可以将多个文本文件合并为一个RDD,使用union函数来实现。 需要注意的是,textFile函数只是将文件读取为RDD,而不会对文件内容进行解析或解码。对于非文本文件(如二进制文件),需要自行根据文件格式进行解析和处理。 总之,通过SparktextFile函数可以方便地读取文本文件,并在集群中进行并行处理和分析。同时,可以应用Spark丰富的操作和转换函数对文件内容进行处理和转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值