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可以理解为一个数组)