spark 基于JAVA的函数使用

        spark 底层是基于scale 语言写的,因此在利用spark 计算数据处理时大多数都是scale,java 方面的文档有,但是描述不清。在此记录下使用过程中经常用到的一些函数用法。

  • DataFrame

         

DataFrame DF = sqlContext.read().jdbc(url,table,Properties).select("*").where("col= '1'");

          select():  select 出需要的字段,“*”表示所有字段

          where():  条件查询,col 为条件字段

          JavaRDD<Row> RDD = DF.javaRDD();

          javaRDD(): DataFrame 转成 JavaRDD ,以便进行简便的数据处理          

List<Long> Ids = idRDD.map(
      new Function<Row, Long>() { 
          private static final long serialVersionUID = 1L; 
              @Override 
              public Long call(Row row) throws Exception {
                   return row.getLong(0); 
               } 
          }
).collect();

      map() : 把rdd中的数据遍历,在内置方法中  可以添加逻辑处理,返回自己定义的(Long)类型的数据的rdd;

    collect() : 把rdd 转成List数组

jdbcDF1.registerTempTable(table);

registerTempTable(table):可以将查询出来的数据DF数据注册成一个临时表,方便后续以sql进行数据筛选,table为临时表名称

JavaDoubleRDD double = DF
                    .where("col > 0")
                    .javaRDD().mapToDouble(
                            new DoubleFunction<Row>() {
                                public double call(Row row) throws Exception {
                                    return row.getDouble(1);
                                }
                            }
                    );

 与map()用法大同小异,唯一的区别是,JavaDoubleRDD只能返回Double的数据。

GroupedData data = DF.groupBy("col");
           

 JavaDoubleRDD doubleRDD= result2.filter(new Function<Object, Boolean>() {
                @Override
                public Boolean call(Object obj) throws Exception {
                    return  a > 0;
                }
            }).mapToDouble(
                    new DoubleFunction<Object>() {
                        public double call(Object obj) throws Exception {
                            return Double.parseDouble(obj.double);
                        }
                    }
            );

DF.sort(DF.col("col").desc()).first().getDouble(2)

 groupBy("col"): 分组函数,“col”为需要分组的字段,返回的数据类型:GroupedData,可以对分组后的数据进行一些操作,例如求和(GroupedData.count()),计算个数(GroupedData.sum())。

Rdd.filter(): 筛选函数,“renturn a>0”,返回筛选条件,那么得到的RDD数据中就过滤掉了,a>0的数据了。

 DF.sort(DF.col("col").desc()).first().getDouble(2): sort()为排序函数,col未需要排序的字段,desc()表示降序排列,first()表示排列后获取第一个RDD数据,getDouble(2)表示获取RDD数据中的第3个为Double数据类型的数据。(RDD可以理解为一个数组)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值