我有一个拥有1000万行且只有3列的火花数据帧。其中一列是MapType(),其中包含date,value的映射。因此,该列包含时间序列数据,每行包含一个时间序列。因此,我在该数据帧中有1000万个时间序列。
我有用Python编写的自定义代码/函数来检测时间序列数据中的峰值,并使用pyspark udf来使用该函数来检测数据帧中每个时间序列的峰值。在我的尖峰检测功能中,MapType()对象被转换为pandas数据帧,我使用pandas mean和std。检测尖峰的偏差。
pyspark udf价格昂贵。对于1000万行,这需要大约90分钟。我们还有其他选择吗? 如果udf是唯一的选择,我们如何才能提高性能?请注意,我不能使用spark2.3 / pandas_udf,我只能使用spark2.2。