spark RDD算子(一) parallelize,makeRDD,textFile

一、parallelize

调用SparkContext 的 parallelize(),将一个存在的集合,变成一个RDD,这种方式试用于学习spark和做一些spark的测试

scala版本

def parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: ClassTag[T]): RDD[T]
  • 第一个参数一是一个 Seq集合
  • 第二个参数是分区数
  • 返回的是RDD[T]

案例:

scala> sc.parallelize(List("hello world","hello scala","hello spark"))
res0: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:25

在这里插入图片描述

Java版本

java版本只能接收List的集合

def parallelize[T](list : java.util.List[T], numSlices : scala.Int) : org.apache.spark.api.java.JavaRDD[T] = { /* compiled code */ }
  • 第一个参数是一个List集合
  • 第二个参数是一个分区,可以默认
  • 返回的是一个JavaRDD[T]

案例:

SparkConf conf = new SparkConf().setAppName("java1").setMaster("local[*]");
JavaSparkContext sc = new JavaSparkContext(conf);

List<String> strings = Arrays.asList("hello world", "hello java", "hello spark");
JavaRDD<String> rdd1 = sc.parallelize(strings);
List<String> collect = rdd1.collect();
for (String value:
        collect) {
    System.out.println(value);
}

在这里插入图片描述

二、makeRDD

只有scala版本的才有makeRDD

def makeRDD[T](seq : scala.Seq[T], numSlices : scala.Int = { /* compiled code */ })

跟parallelize类似

案例:

scala> sc.makeRDD(List("hello world","hello java","hello spark"))
res1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[1] at makeRDD at <console>:25

在这里插入图片描述

三、textFile

调用SparkContext.textFile()方法,从外部存储中读取数据来创建 RDD
例如在我本地F:\dataexample\wordcount\input下有个sample.txt文件,文件随便写了点内容,我需要将里面的内容读取出来创建RDD

案例:
在项目中创建src同级目录in,并在此目录中创建word.txt文件
word.txt文件内容如下:

hello world
hello kb09
hello scala

scala版本

//使用本地文件创建RDD
//绝对路径
val lines: RDD[String] = sc.textFile("E:\\qianchun\\Scala\\kb09\\sparkdemo\\in\\word.txt")
lines.collect.foreach(println)

//相对路径
val lines2: RDD[String] = sc.textFile("in/word.txt")
lines2.collect.foreach(println)

println("-------------HDFS----------------")
//使用HDFS文件创建RDD
val linesHDFS: RDD[String] = sc.textFile("hdfs://hadoop001:9000/data/spark/word.txt")
linesHDFS.collect.foreach(println)

//通配符形式
val linesHDFS2: RDD[String] = sc.textFile("hdfs://hadoop001:9000/data/spark/*2.txt")
linesHDFS2.collect.foreach(println)

在这里插入图片描述

Java版本

System.out.println("------------本地文件---------------");
JavaRDD<String> stringJavaRDD = sc.textFile("in/word.txt");
List<String> collect1 = stringJavaRDD.collect();
for (String str:
     collect1) {
    System.out.println(str);
}


System.out.println("-------------HDFS文件--------------");
JavaRDD<String> stringHDFSJavaRDD = sc.textFile("hdfs://hadoop001:9000/data/spark/word.txt");
List<String> collect2 = stringHDFSJavaRDD.collect();
for (String str1:
     collect2) {
    System.out.println(str1);
}

在这里插入图片描述
注:
textFile支持分区,支持模式匹配,例如把F:\dataexample\wordcount\目录下inp开头的给转换成RDD

var lines = sc.textFile("F:\\dataexample\\wordcount\\inp*")

多个路径可以使用逗号分隔,例如:

var lines = sc.textFile("dir1,dir2",3)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值