【发布时间】:2019-08-20 21:23:48
【问题描述】:
我有一个查询,我需要使用 pyspark 计算内存利用率。我已经使用 pivot 使用 python pandas 实现了这一点,但现在我需要在 pyspark 中完成,而旋转将是一个昂贵的功能,所以我想知道 pyspark 中是否有任何替代方案用于此解决方案
time_stamp Hostname kpi kpi_subtype value_current
2019/08/17 10:01:05 Server1 memory Total 100
2019/08/17 10:01:06 Server1 memory used 35
2019/08/17 10:01:09 Server1 memory buffer 8
2019/08/17 10:02:04 Server1 memory cached 10
2019/08/17 10:01:05 Server2 memory Total 100
2019/08/17 10:01:06 Server2 memory used 42
2019/08/17 10:01:09 Server2 memory buffer 7
2019/08/17 10:02:04 Server2 memory cached 9
2019/08/17 10:07:05 Server1 memory Total 100
2019/08/17 10:07:06 Server1 memory used 35
2019/08/17 10:07:09 Server1 memory buffer 8
2019/08/17 10:07:04 Server1 memory cached 10
2019/08/17 10:08:05 Server2 memory Total 100
2019/08/17 10:08:06 Server2 memory used 35
2019/08/17 10:08:09 Server2 memory buffer 8
2019/08/17 10:08:04 Server2 memory cached 10
需要转化为
time_stamp Hostname kpi Percentage
2019-08-17 10:05:00 Server1 memory 17
2019-08-17 10:05:00 Server2 memory 26
2019-08-17 10:10:00 Server1 memory 17
2019-08-17 10:10:00 Server2 memory 17
我使用的 Python 代码
df3 = pd.read_csv('/home/yasin/Documents/IMI/Data/memorry sample.csv')
df3['time_stamp'] = pd.to_datetime(df3['time_stamp'])
ns5min=5*60*1000000000
df3['time_stamp'] = pd.to_datetime(((df3['time_stamp'].astype(np.int64) // ns5min + 1 ) * ns5min))
df4 = df3.pivot_table('value_current' , ['time_stamp' , 'Hostname ' , 'kpi' ], 'kpi_subtype')
df4 = df4.reset_index()
df4['Percentage'] = ((df4['Total'] - (df4['Total'] - df4['used'] + df4['buffer'] + df4['cached'])) / df4['Total']) * 100
寻找一种在 pyspark 中复制它并在 python 中作为枢轴的更有效方式是一项昂贵的操作,我需要在一个非常大的数据集上每 5 分钟执行一次
【问题讨论】:
-
每次您将拥有服务器 1 和 2 的多个记录集?
-
是的,每 5 分钟我们将获得相同的数据集
-
第一组server1&server2的时间范围是多少?是5分钟吗?它会延长超过 5 分钟还是会保持在该时间范围内
-
每 5 分钟将是同一组服务器。实际上将有大约 20000 台服务器
标签: python apache-spark pyspark apache-spark-sql pyspark-sql