python - 提高 Parquet 文件中重写时间戳的性能

标签 python pandas amazon-s3 parquet pyarrow

由于数据使用者的一些限制,我需要“重写”一些 parquet 文件,以将纳秒精度的时间戳转换为毫秒精度的时间戳。

我已经实现了这个并且它有效,但我对此并不完全满意。

import pandas as pd

        df = pd.read_parquet(
            f's3://{bucket}/{key}', engine='pyarrow')

        for col_name in df.columns:
            if df[col_name].dtype == 'datetime64[ns]':
                df[col_name] = df[col_name].values.astype('datetime64[ms]')

        df.to_parquet(f's3://{outputBucket}/{outputPrefix}{additionalSuffix}',
                      engine='pyarrow', index=False)

我目前正在 lambda 中为每个文件运行此作业,但我可以看到这可能会很昂贵,并且如果作业花费的时间超过 15 分钟,则可能并不总是有效,因为这是 Lambda 可以运行的最长时间。

文件可以较大(>500 MB)。

我可以考虑的任何想法或其他方法吗?我无法使用 pyspark,因为我的数据集包含无符号整数。

最佳答案

您可以尝试一次重写所有列。也许这会减少 pandas 中的一些内存副本,从而加快该过程(如果您有很多列):

df_datetimes = df.select_dtypes(include="datetime64[ns]")
df[df_datetimes.columns] = df_datetimes.astype("datetime64[ms]")

关于python - 提高 Parquet 文件中重写时间戳的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436632/

相关文章:

python - 理解Python的内置运算符重载行为

python - 用plotly绘制时间序列数据时出错,真值不明确

python - 将数据帧写入文件时如何进行排序?

python - 在 TensorFlow 中,如何有选择地将函数仅应用于张量每行的最大元素?

python - 通过 stripe API 列出所有客户

python - WxPython 将选择转换为数值 TypeError

python - 使用 Pandas 在选项卡中的单个 csv 表中添加多个 csv

amazon-s3 - 亚马逊S3 : is it a good idea to expose (public) key to users

amazon-web-services - 如何创建/写入文本文件而不是上传到 S3 存储桶

amazon-web-services - 为什么我的无服务器 Lambda 无法访问 S3 存储桶和项目?