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 RDD = DF.javaRDD();

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

List Ids = idRDD.map(
      new Function() { 
          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() {
                                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() {
                @Override
                public Boolean call(Object obj) throws Exception {
                    return  a > 0;
                }
            }).mapToDouble(
                    new DoubleFunction() {
                        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可以理解为一个数组)

 

你可能感兴趣的:(方法)