java rdd 聚合_RDD java API使用

1.RDD介绍:

RDD,弹性分布式数据集,即分布式的元素集合。在spark中,对所有数据的操作不外乎是创建RDD、转化已有的RDD以及调用RDD操作进行求值。在这一切的背后,Spark会自动将RDD中的数据分发到集群中,并将操作并行化。

Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。RDD可以包含Python,Java,Scala中任意类型的对象,甚至可以包含用户自定义的对象。

用户可以使用两种方法创建RDD:读取一个外部数据集,或在驱动器程序中分发驱动器程序中的对象集合,比如list或者set。

RDD的转化操作都是惰性求值的,这意味着我们对RDD调用转化操作,操作不会立即执行。相反,Spark会在内部记录下所要求执行的操作的相关信息。我们不应该把RDD看做存放着特定数据的数据集,而最好把每个RDD当做我们通过转化操作构建出来的、记录如何计算数据的指令列表。数据读取到RDD中的操作也是惰性的,数据只会在必要时读取。转化操作和读取操作都有可能多次执行。

2.创建RDD数据集

(1)读取一个外部数据集

JavaRDD lines=sc.textFile(inputFile);

(2)分发对象集合,这里以list为例

List list=new ArrayList();

list.add("a");

list.add("b");

list.add("c");

JavaRDD temp=sc.parallelize(list);

//上述方式等价于

JavaRDD temp2=sc.parallelize(Arrays.asList("a","b","c"));

3.RDD操作

(1)转化操作

用java实现过滤器转化操作:

List list=new ArrayList();

//建立列表,列表中包含以下自定义表项

list.add("error:a");

list.add("error:b");

list.add("error:c");

list.add("warning:d");

list.add("hadppy ending!");

//将列表转换为RDD对象

JavaRDD lines = sc.parallelize(list);

//将RDD对象lines中有error的表项过滤出来,放在RDD对象errorLines中

JavaRDD errorLines = lines.filter(

new Function() {

public Boolean call(String v1) throws Exception {

return v1.contains("error");

}

}

);

//遍历过滤出来的列表项

List errorList = errorLines.collect();

for (String line : errorList)

System.out.println(line);

输出:

error:a

error:b

error:c

可见,列表list中包含词语error的表项都被正确的过滤出来了。

(2)合并操作

将两个RDD数据集合并为一个RDD数据集

接上述程序示例:

union

输出:

error:a

error:b

error:c

warning:d

可见,将原始列表项中的所有error项和warning项都过滤出来了。

(3)获取RDD数据集中的部分或者全部元素

①获取RDD数据集中的部分元素   .take(int num)  返回值List

获取RDD数据集中的前num项。

/*** Take the first num elements of the RDD. This currently scans the partitions *one by one*, so* it will be slow if a lot of partitions are required. In that case, use collect() to get the* whole RDD instead.*/def take(num: Int): JList[T]

程序示例:接上

JavaRDD unionLines=errorLines.union(warningLines);

for(String line :unionLines.take(2))

System.out.println(line);

输出:

error:a

error:b

可见,输出了RDD数据集unionLines的前2项

②获取RDD数据集中的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值