在 Python Pandas 中使用 read_parquet 从 AWS S3 读取镶木地板文件时出现分段错误

Posted

技术标签:

【中文标题】在 Python Pandas 中使用 read_parquet 从 AWS S3 读取镶木地板文件时出现分段错误【英文标题】:Segmentation Fault while reading parquet file from AWS S3 using read_parquet in Python Pandas 【发布时间】:2020-01-07 12:26:12 【问题描述】:

我有一个在 AWS EC2(在 AWS Linux 上)上运行的 Python 脚本,这些脚本将 Parquet 文件从 S3 提取到 Pandas 数据帧中。我现在正在迁移到新的 AWS 账户并设置新的 EC2。这次在 python 虚拟环境中执行相同的脚本时,我得到“Segmentation Fault”并且执行结束。

import pandas as pd
import numpy as np
import pyarrow.parquet as pq
import s3fs
import boto3
from fastparquet import write
from fastparquet import ParquetFile

print("loading...")
df = pd.read_parquet('<my_s3_path.parquet>', engine='fastparquet')

所有包均已导入,所有 S3 和 AWS 配置均已设置。

当我执行完整的脚本时:

loading...
Segmentation fault

正如您所见,没有太多可使用的。我已经用谷歌搜索了几个小时,我看到了很多关于这种症状的猜测和原因。我会很感激这里的帮助。

【问题讨论】:

【参考方案1】:

我可以通过更改使用的引擎参数来解决这个问题。 根据pandas的官方文档,这些是引擎选项:

引擎:‘auto’, ‘pyarrow’, ‘fastparquet’,默认‘auto’

所以只需更改为“自动”,问题就解决了。

df = pd.read_parquet('<my_s3_path.parquet>')

【讨论】:

这也适用于我!另一种解决方案是,当您在循环中加载多个镶木地板时,放置一个打印语句(可能为空)。可能是某处的比赛条件 我最近发现的另一个选项,如果您使用虚拟环境,请尝试将其删除并使用最新的 requirements.txt 文件重新创建它。可能有些依赖搞砸了

以上是关于在 Python Pandas 中使用 read_parquet 从 AWS S3 读取镶木地板文件时出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Dataflow 的 Pandas read_gbq 初始化错误

使用 pandas read_csv 方法的 Python 多级索引

使用 python 中 pandas 的 read_excel 函数将日期保留为字符串

Python:Pandas read_excel 无法打开 .xls 文件,不支持 xlrd

Python Pandas 中的引擎 read_csv

在 Python Pandas 中使用多个字符分隔符 read_csv