RDD操作

RDD支持两种操作:转化操作和行动操作,转化操作是返回一个新的RDD的操作比如map()和filter(),行动操作则是向驱动器程序返回结果或把结果写入外部系统的操作,会触发实际的计算比如count(),first(),简而言之就是转化操作返回的是RDD,而行动操作返回的是其他数据类型,下面来一个转化操作的列子:
文本文件内容

现在遍历文本文件,选出里面含error的错误日志:
/**
 * Created by hbin on 2016/12/9.
 */
import java.util.Arrays;
import java.util.List;

import breeze.optimize.linear.LinearProgram;
import io.netty.util.internal.StringUtil;
import org.apache.commons.lang.StringUtils;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function;


/**
 * spark对数据的核心抽象  RDD(弹性分布式数据集)
 * RDD就是分布式的元素集合,在spark中对数据的所有操作不外乎创建RDD
 * 转化已有RDD以及调用RDD操作进行求值,spark会自动将RDD中的数据分发到集群上,
 * 并将操作并行化
 */
public class BasicMap {
    public static void main(String[] args) throws Exception {
        SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi");
        JavaSparkContext jsc = new JavaSparkContext(sparkConf);

        JavaRDD<String> inputRDD=jsc.textFile("E:\\sparkProject\\log.txt");
        JavaRDD<String> errorsRDD=inputRDD.filter(new Function<String, Boolean>() {
            @Override
            public Boolean call(String s) throws Exception {
                return s.contains("error");
            }
        });
        System.out.println("errorsRDD="+errorsRDD.collect());
    }
}
执行结果:
errorsRDD=[error:, error:, error:, error:, error:, error:, error:, error:, error:, error:, error:, error:, error:, error:]
日志分析过程中创建出的RDD谱系图

spark中的RDD就是一个不可变的分布式对象集合,每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。RDD可以包含python,Java,Scala中的任意类型的对象。
RDD中的行动操作

/**
 * Created by hbin on 2016/12/9.
 */
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import breeze.optimize.linear.LinearProgram;
import io.netty.util.internal.StringUtil;
import org.apache.commons.lang.StringUtils;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.Function2;


/**
 * spark对数据的核心抽象  RDD(弹性分布式数据集)
 * RDD就是分布式的元素集合,在spark中对数据的所有操作不外乎创建RDD
 * 转化已有RDD以及调用RDD操作进行求值,spark会自动将RDD中的数据分发到集群上,
 * 并将操作并行化
 */
public class BasicMap {
    public static void main(String[] args) throws Exception {
        SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi");
        JavaSparkContext jsc = new JavaSparkContext(sparkConf);

        JavaRDD<Integer> RDD1=jsc.parallelize(Arrays.asList(1,2,3,4,5,6,7,8,9),6);// 并行化
        Integer sum=RDD1.reduce(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer call(Integer x, Integer y) throws Exception {
                return x*y;
            }
        });
        System.out.println("collect()="+RDD1.collect());
        System.out.println("count()="+RDD1.count());
        System.out.println("countByValue()="+RDD1.countByValue());
        System.out.println("take(3)="+RDD1.take(3));
        System.out.println("top()="+RDD1.top(3));
        System.out.println("takeOrdered(3)="+RDD1.takeOrdered(3));
        System.out.println("takeSample(true,3)="+RDD1.takeSample(true,3));

    }
}

执行结果
collect()=[1, 2, 3, 4, 5, 6, 7, 8, 9]
count()=9
countByValue()={5=1, 1=1, 6=1, 9=1, 2=1, 7=1, 3=1, 8=1, 4=1}
take(3)=[1, 2, 3]
top()=[9, 8, 7]
takeOrdered(3)=[1, 2, 3]
takeSample(true,3)=[2, 6, 5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值