Dataframe 使用Elasticsearch中的Pyspark平均数据点
我有以下结构的RDD:Dataframe 使用Elasticsearch中的Pyspark平均数据点,dataframe,apache-spark,
elasticsearch,apache-spark-sql,rdd,Dataframe,Apache Spark,
elasticsearch,Apache Spark Sql,Rdd,我有以下结构的RDD: {'Bytes': 30213, 'SentBytes': 142, 'ResponseCode': '200', 'ResponseTime': 1, 'ConnectTime': 0, 'SampleLabel': 'data/30000', 'Timestamp': 1593715514000, 'Latency': 1} 转换为DF时,如下所示: +-----+-----------+-------+------------+------------+-----
{'Bytes': 30213, 'SentBytes': 142, 'ResponseCode': '200', 'ResponseTime': 1, 'ConnectTime': 0, 'SampleLabel': 'data/30000', 'Timestamp': 1593715514000, 'Latency': 1}
转换为DF时,如下所示:
+-----+-----------+-------+------------+------------+---------------+---------+-------------+
|Bytes|ConnectTime|Latency|ResponseCode|ResponseTime| SampleLabel|SentBytes| Timestamp|
+-----+-----------+-------+------------+------------+---------------+---------+-------------+
|30213| 0| 1| 200| 1| data/30000| 142|1593715514000|
|51422| 0| 2| 200| 2|data/random_50K| 147|1593715514000|
|55829| 0| 2| 200| 2| data/kiwi.jpg| 140|1593715514000|
|55829| 0| 2| 200| 2| data/kiwi.jpg| 140|1593715514001|
|43525| 0| 3| 200| 3| data/bus.jpg| 139|1593715514001|
|43910| 0| 4| 200| 4| data/bus.jpg| 140|1593715514001|
|65744| 0| 3| 200| 6|data/random_64K| 142|1593715514000|
|43525| 0| 4| 200| 6| data/bus.jpg| 139|1593715514000|
|65749| 0| 4| 200| 6|data/random_64K| 147|1593715514001|
|65744| 0| 2| 200| 2|data/random_64K| 142|1593715514000|
|11512| 0| 3| 200| 3|data/flower.jpg| 142|1593715514001|
|43525| 1| 5| 200| 6| data/bus.jpg| 139|1593715514001|
|65744| 0| 1| 200| 1|data/random_64K| 142|1593715514000|
|30213| 0| 2| 200| 2| data/30000| 142|1593715514000|
|65744| 0| 2| 200| 2|data/random_64K| 142|1593715514000|
|43525| 0| 2| 200| 2| data/bus.jpg| 139|1593715514000|
|65744| 0| 2| 200| 2|data/random_64K| 142|1593715514000|
|11512| 0| 2| 200| 2|data/flower.jpg| 142|1593715514000|
|30213| 0| 2| 200| 2| data/30000| 142|1593715514001|
|55829| 0| 2| 200| 2| data/kiwi.jpg| 140|1593715514001|
+-----+-----------+-------+------------+------------+---------------+---------+-------------+
我的任务是根据SampleLabel每秒平均数据点。请注意,时间戳字段以毫秒为单位
+-------------+---------------+------------+------------------+------------------+------------------+------------------+------------------+
| Timestamp| SampleLabel|ResponseCode| avg(SentBytes)| avg(ResponseTime)| avg(Bytes)| avg(ConnectTime)| avg(Latency)|
+-------------+---------------+------------+------------------+------------------+------------------+------------------+------------------+
|1593715514000| data/30000| 200| 142.0| 1.5| 30213.0| 0.0| 1.5|
|1593715514001| data/30000| 200| 142.0| 2.0| 30213.0| 0.0| 2.0|
|1593715514000| data/bus.jpg| 200|139.33333333333334| 5.666666666666667|43653.333333333336| 0.0| 4.333333333333333|
|1593715514001| data/bus.jpg| 200| 139.5| 5.5| 43717.5|0.3333333333333333| 4.833333333333333|
|1593715514000|data/flower.jpg| 200| 142.0| 2.0| 11512.0| 0.0| 2.0|
|1593715514001|data/flower.jpg| 200| 142.0| 4.0| 11512.0| 0.0| 4.0|
|1593715514000| data/kiwi.jpg| 200| 140.0| 3.5| 55829.0| 0.0| 3.0|
|1593715514001| data/kiwi.jpg| 200| 140.0|2.6666666666666665| 55829.0| 0.0|2.3333333333333335|
我有以下一段代码将RDD转换为DF并处理数据点:
df = es_rdd.toDF()
df = df.groupby("Timestamp", "SampleLabel", "ResponseCode").avg("SentBytes", "ResponseTime", "Bytes", "ConnectTime", "Latency").where(col("ResponseCode") == "200")
结果如下,但请注意时间戳仍以毫秒为单位
+-------------+---------------+------------+------------------+------------------+------------------+------------------+------------------+
| Timestamp| SampleLabel|ResponseCode| avg(SentBytes)| avg(ResponseTime)| avg(Bytes)| avg(ConnectTime)| avg(Latency)|
+-------------+---------------+------------+------------------+------------------+------------------+------------------+------------------+
|1593715514000| data/30000| 200| 142.0| 1.5| 30213.0| 0.0| 1.5|
|1593715514001| data/30000| 200| 142.0| 2.0| 30213.0| 0.0| 2.0|
|1593715514000| data/bus.jpg| 200|139.33333333333334| 5.666666666666667|43653.333333333336| 0.0| 4.333333333333333|
|1593715514001| data/bus.jpg| 200| 139.5| 5.5| 43717.5|0.3333333333333333| 4.833333333333333|
|1593715514000|data/flower.jpg| 200| 142.0| 2.0| 11512.0| 0.0| 2.0|
|1593715514001|data/flower.jpg| 200| 142.0| 4.0| 11512.0| 0.0| 4.0|
|1593715514000| data/kiwi.jpg| 200| 140.0| 3.5| 55829.0| 0.0| 3.0|
|1593715514001| data/kiwi.jpg| 200| 140.0|2.6666666666666665| 55829.0| 0.0|2.3333333333333335|
但是,这对于RDD中的大量记录来说是低效的,而且非常耗时。
如果能以更快的速度实现这一目标,我将不胜感激