相关疑难解决方法(0)

如何使用pyarrow从S3读取镶木地板文件列表作为pandas数据框?

我有一种使用boto3(1.4.4),pyarrow(0.4.1)和pandas(0.20.3)实现这一目标的hacky方法.

首先,我可以在本地读取单个镶木地板文件,如下所示:

import pyarrow.parquet as pq

path = 'parquet/part-r-00000-1e638be4-e31f-498a-a359-47d017a0059c.gz.parquet'
table = pq.read_table(path)
df = table.to_pandas()
Run Code Online (Sandbox Code Playgroud)

我也可以在本地读取镶木地板文件目录,如下所示:

import pyarrow.parquet as pq

dataset = pq.ParquetDataset('parquet/')
table = dataset.read()
df = table.to_pandas()
Run Code Online (Sandbox Code Playgroud)

两者都像魅力一样.现在我想用存储在S3存储桶中的文件远程实现相同的功能.我希望这样的东西能起作用:

dataset = pq.ParquetDataset('s3n://dsn/to/my/bucket')
Run Code Online (Sandbox Code Playgroud)

但它没有:

OSError: Passed non-file path: s3n://dsn/to/my/bucket

在仔细阅读了pyarrow的文档后,目前似乎无法做到这一点.所以我提出了以下解决方案:

从S3读取单个文件并获取pandas数据帧:

import io
import boto3
import pyarrow.parquet as pq

buffer = io.BytesIO()
s3 = boto3.resource('s3')
s3_object = s3.Object('bucket-name', 'key/to/parquet/file.gz.parquet')
s3_object.download_fileobj(buffer)
table = pq.read_table(buffer)
df = table.to_pandas()
Run Code Online (Sandbox Code Playgroud)

在这里,我的hacky,not-so-optimized,解决方案从S3文件夹路径创建一个pandas数据框:

import io
import …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas boto3 pyarrow

25
推荐指数
7
解决办法
2万
查看次数

在python中导入fastparquet时出现snappy错误

我安装了已经安装了python(3.6)&anaconda的EC2服务器中的以下模块:

  • 瞬间
  • pyarrow
  • s3fs
  • fastparquet

除了fastparquet,其他一切都在导入.当我尝试导入fastparquet时,它会抛出以下错误:

[username@ip8 ~]$ conda -V
conda 4.2.13
[username@ip-~]$ python
    Python 3.6.0 |Anaconda custom (64-bit)| (default, Dec 23 2016, 12:22:00)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
     import fastparquet
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/username/anaconda3/lib/python3.6/site-packages/fastparquet/__init__.py", line 15, in <module>
        from .core import read_thrift
      File "/home/username/anaconda3/lib/python3.6/site-packages/fastparquet/core.py", line 11, in <module>
        from .compression import decompress_data
      File "/home/username/anaconda3/lib/python3.6/site-packages/fastparquet/compression.py", line 43, in <module> …
Run Code Online (Sandbox Code Playgroud)

python snappy anaconda conda fastparquet

6
推荐指数
1
解决办法
3125
查看次数

Python - 读取没有熊猫的镶木地板文件

目前我正在使用下面的代码Python 3.5, Windows读取parquet文件。

import pandas as pd

parquetfilename = 'File1.parquet'
parquetFile = pd.read_parquet(parquetfilename, columns=['column1', 'column2'])  
Run Code Online (Sandbox Code Playgroud)

但是,我想在不使用熊猫的情况下这样做。如何最好地做到这一点?我Python 2.7 and 3.6Windows.

python pandas parquet

6
推荐指数
1
解决办法
693
查看次数

将 Pandas 数据帧写入 s3 AWS 中的镶木地板

我想以镶木地板格式在我的 s3 存储桶中写入我的数据帧。我知道如何以 csv 格式编写数据帧。但我不知道如何以镶木地板格式书写。这是 csv 格式的代码(我不显示字段 ServerSideEncryption 和 SSEKMSKeyId 但我在实际代码中使用它们):

csv_to_write = df.to_csv(None).encode()
s3_client.put_object(Bucket=bucket_name,Key='data.csv', Body=csv_to_write,
              ServerSideEncryption='XXXXX', SSEKMSKeyId='XXXXXXXX')
Run Code Online (Sandbox Code Playgroud)

有人有镶木地板的等价物吗?谢谢

python amazon-s3 amazon-web-services pandas parquet

3
推荐指数
2
解决办法
5561
查看次数