elasticsearch时间柱状图聚合java实现

需求:统计每天有多少条数据,以及某字段的平均值。

1. 使用DateHistogramAggregationBuilder按天统计,再嵌入aggs取平均值。

如果要对结果进行排序,在 AggregationBuilders 加上 .order(Histogram.Order.COUNT_DESC)

1
2
3
4
5
6
7
8
9
10
11
AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders
.avg("avg_aggsName")
.field("fieldName");
DateHistogramAggregationBuilder dateHistogramAggregationBuilder = AggregationBuilders
.dateHistogram("aggsName")
.field("fieldName") //可以是time
.dateHistogramInterval(DateHistogramInterval.DAY)
.format("yyyy-MM-dd")
.minDocCount(0L)
.subAggregation(avgAggregationBuilder);
2. 如果再新增一条需求:只统计近一个月的数据。

那么就加一条filter,过滤后再聚合。

1
2
3
4
5
6
7
8
9
10
11
12
//日期限制
QueryBuilder rangeBuilder = QueryBuilders
.rangeQuery(aggsName)
.format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
.gte(timeRange.get("startTime").toString())
.lte(timeRange.get("endTime").toString());
// 过滤后聚合 .missing(0)
QueryBuilder queryBuilder = QueryBuilders
.boolQuery()
.filter(rangeBuilder);

Read More

爬取航班数据

针对飞常准航旅纵横,爬取航段+航班日期航班号+航班日期数据

url

飞常准:

航段
'http://webapp.veryzhun.com/h5/flightsearch?arr=%s&dep=%s&' \
'date=%s&token=根据自己的浏览器来' % (arr, dep, fData)
航班
'http://webapp.veryzhun.com/h5/flightsearch?fnum=%s&date=%s' \
'&token=小仙女的马赛克' % (fNo, fData)
arr:目的地 dep:出发地 fData:航班日期 fNo:航班号

航旅纵横:

航段
'http://www.umetrip.com/mskyweb/fs/fa.do?dep=' \
'%s&arr=%s&date=%s&channel=' % (arr, dep, fData)
航班
'http://www.umetrip.com/mskyweb/fs/fc.do?' \
'flightNo=%s&date=%s&channel=' % (fNo, fData)

爬取数据

Read More

elasticsearch-spark读写数据

在向es里写数据的时候,部分field是用scala写的。

这时候我用java查询数据,结果出现了以下错误。

1
2
3
4
SparkSession spark = ESMysqlSpark.getSession();
SQLContext sqlContext = new SQLContext(spark);
Dataset readData = EsSparkSQL.esDF(sqlContext, "index/type", query);
readData.show();

错误原因: 类型转换不兼容

1
scala.MatchError: Buffer(中午) (of class scala.collection.convert.Wrappers$JListWrapper)

解决方法:使用EsSpark.esJsonRDD来读取数据,再将RDD转成JavaRDD类型。

Read More

pandas_melt

原型:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数:

  • frame : DataFrame

  • id_vars : tuple, list, or ndarray, optional

    Column(s) to use as identifier variables.

  • value_vars : tuple, list, or ndarray, optional

    Column(s) to unpivot. If not specified, uses all columns that are not set as id_vars.

  • var_name : scalar

    Name to use for the ‘variable’ column. If None it uses frame.columns.name or ‘variable’.

  • value_name : scalar, default ‘value’

    Name to use for the ‘value’ column.

  • col_level : int or string, optional

    If columns are a MultiIndex then use this level to melt.

举个简单的例子:

Read More