pyspark 使用petastorm将时间序列数据( parquet 格式)转换为序列的最佳方法是什么?

amrnrhlw  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(140)

请原谅我使用错误的术语。我仍然在努力与许多Spark和分布式相关的东西。
这是我的用例,我不能得到一个完整的实现图片。
我以 parquet 格式保存了40列和100个时间步长的时间序列数据。
我了解到,要对大数据进行分布式训练,我们可以使用petastorm进行数据注入,使用Horovod进行训练。但我不清楚数据需要如何分区(每个ID一个分区?什么是行组?),以及如何将数据转换为LSTM预期的序列?
在这个方向上的任何指针都会有很大的帮助。谢谢!

piwo6bdm

piwo6bdm1#

我可以想到两种方法来使用petastorm加载时间序列数据。第一种方法是按id列分组,然后使用sql函数collect_list(确保数组按时间排序)将特征聚合到一个数组中。这将给您一个类似如下的表。

id  |         time         |      feature_1       |
---------------------------------------------------
1   | [t11, t12, t13, ...] | [f11, f12, f13, ...] |
2   | [t21, t22, t23, ...] | [f21, f22, f23, ...] |

当您像这样保存数据时,您应该不需要担心 parquet 行组,因为每一行都包含一个时间序列的所有数据。
另一种方法是使用n-gram来加载未聚合的数据。n-gram允许您以特定顺序加载行。petastorm API文档中的petastorm.ngram.NGram下有一些这样的示例。请注意,如果您采用这种方法,则需要担心 parquet 行组,因为n-gram不会跨越行组(请参阅API文档中描述的示例)。我不确定按id等进行分区是否总是能确保一个时间序列的所有数据都在一个行组中。您可能还需要根据时间序列的大小将行组的大小设置为某个值。

相关问题