问题标签 [pyarrow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
9164 浏览

hdfs - 使用 PyArrow 从 HDFS 读取镶木地板文件

我知道我可以使用 pyarrow 连接到 HDFS 集群pyarrow.hdfs.connect()

我也知道我可以使用pyarrow.parquet's读取镶木地板文件read_table()

但是,read_table()接受文件路径,而hdfs.connect()给我一个HadoopFileSystem实例。

是否可以仅使用 pyarrow(安装了 libhdfs3)来获取驻留在 HDFS 集群中的镶木地板文件/文件夹?我希望得到的是to_pydict()函数,然后我可以传递数据。

0 投票
1 回答
5721 浏览

python - pyarrow 可以将多个 parquet 文件写入 fastparquet 的 file_scheme='hive' 选项之类的文件夹吗?

我有一个数百万条记录的 SQL 表,我计划使用 pyarrow 库将其写入文件夹中的许多 parquet 文件。数据内容似乎太大而无法存储在单个 parquet 文件中。

但是,我似乎无法使用 pyarrow 库找到允许我指定以下内容的 API 或参数:

正如 fastparquet python 库所支持的那样。

这是我的示例代码:

这会引发错误:

如果我用以下内容替换最后一行,它可以正常工作,但只写入一个大文件:

有什么想法可以用 pyarrow 进行多文件输出吗?

0 投票
1 回答
2236 浏览

python - 在 Athena 中创建覆盖写入镶木地板文件的表

我正在使用以下 python 脚本从 CSV 文件创建镶木地板文件:

然后我手动将它上传到某个 s3 位置,并在 Athena 中创建一个表。用于创建表的查询:

表创建成功,但是当我尝试查询表时,它不显示内容。它只显示行的索引和列名。这是CSV镶木地板文件。镶木地板上的查询:

我在控制台上看到的结果。

谁能指出这里出了什么问题?

0 投票
3 回答
3982 浏览

python - arrow_table = pa.Table.from_pandas(df) ... 将 Python 对象转换为 String/UTF8 时出错

我编写了一个简单的代码来读取带有 pandas 的 read_csv 的 .csv(完全取决于 pandas 类型推断)。我收到错误消息:

我在互联网上找不到任何有用的东西来解决这个问题。如何在 pyarrow.from_pandas(type= ...) 中使用 'type' 参数

谢谢你。

0 投票
1 回答
1129 浏览

datetime - overflow error using datetimes with Pyarrow

While randomizing datetimes to test a database, I saved them to parquet using pyarrow.parquets' write_table(), then read them back using read_table().

Upon trying to convert to Python datatypes with to_pydict(), I recieved the following error:

I played around, and this happens for datetimes with year larger then 2700 or so (This was at work and this is a larger number, forgot the exact one that was lower).

I'm new to pyarrow, is this expected behavior?

0 投票
4 回答
11985 浏览

python - 使用 AWS Lambda (Python 3) 读取存储在 S3 中的 Parquet 文件

我正在尝试使用 AWS Lambda 在 S3 中加载、处理和编写 Parquet 文件。我的测试/部署过程是:

似乎有两种可能的方法,它们都在 docker 容器本地工作

  1. fastparquet with s3fs:不幸的是,解压后的包大小超过 256MB,因此我无法用它更新 Lambda 代码。
  2. 带有 s3fs 的 pyarrow:我关注了https://github.com/apache/arrow/pull/916,当使用 lambda 函数执行时,我得到:

    • 如果我在 URI 前加上 S3 或 S3N(如代码示例中所示):在 Lambda 环境OSError: Passed non-file path: s3://mybucket/path/to/myfile中的 pyarrow/parquet.py,第 848 行。在本地,我进入IndexError: list index out of rangepyarrow/parquet.py,第 714 行
    • 如果我不使用 S3 或 S3N 作为 URI 前缀:它在本地工作(我可以读取镶木地板数据)。在 Lambda 环境中,我OSError: Passed non-file path: s3://mybucket/path/to/myfile在 pyarrow/parquet.py 的第 848 行中得到了相同的结果。

我的问题是:

  • 为什么我在 docker 容器中得到的结果与在 Lambda 环境中得到的结果不同?
  • 给出 URI 的正确方法是什么?
  • 是否有一种可接受的方式通过 AWS Lambda 读取 S3 中的 Parquet 文件?

谢谢!

0 投票
2 回答
8990 浏览

python - 使用 pyarrow 从分区拼花数据集中读取特定分区

我有一个有点大(~20 GB)的镶木地板格式的分区数据集。我想使用pyarrow. 我以为我可以使用 来完成此pyarrow.parquet.ParquetDataset操作,但似乎并非如此。这是一个小例子来说明我想要什么。

创建随机数据集:

我想读取分区 1 的所有值,仅读取分区 2 的 True。使用pandas.read_parquet,这是不可能的,我必须始终读取整个列。我尝试了以下方法pyarrow

这也不起作用:

我可以pyspark像这样轻松地做到这一点:

如下所示:

这可以用pyarrowor完成pandas,还是我需要一些自定义实现?

更新:根据 Wes 的要求,现在在JIRA上。

0 投票
1 回答
44986 浏览

python - 羽毛和镶木地板有什么区别?

两者都是用于数据分析系统的柱状(磁盘)存储格式。两者都集成在Apache Arrow( python 的pyarrow包)中,旨在与Arrow对应,作为一个柱状内存分析层。

两种格式有何不同?

在可能的情况下,您是否应该在与熊猫一起工作时总是更喜欢羽毛?

羽毛镶木地板更适合的用例是什么,反之亦然?


附录

我在这里找到了一些提示https://github.com/wesm/feather/issues/188,但考虑到这个项目的年轻,它可能有点过时了。

不是一个严肃的速度测试,因为我只是在转储和加载整个 Dataframe,但如果你以前从未听说过这些格式,给你一些印象:

0 投票
0 回答
478 浏览

dataframe - 在镶木地板中保留 dask 数据框划分

当我保存具有有效分区的 dask 数据帧时,回读时不存在分区

我怎样才能保留分区df2

我需要吗

  • 以不同的方式保存df
  • df2不同?
  • 阅读后以某种方式恢复分区df2

按照@mdurant 在评论中的建议,我发现使用engine ='fastparquet'. 不幸的是,fastparquet 无法序列化我的数据。

当 fastparquet 没有时,为什么 pyarrow 会丢失分区信息。

0 投票
1 回答
2571 浏览

python - 使用 Pyarrows 的 HdfsClient 进行多处理

我有一个顶级函数,它获取一个包含 parquet 文件路径和列名的元组。

该函数仅从文件中加载列,转换为 pandas,然后将其打包/序列化为标准形式。就像是:

这在我使用本机模式时有效,也就是从本地文件系统读取文件。

但是,如果我尝试通过 hdfs 读取,我会得到奇怪的(对我来说)箭头错误,无论是当我在每个进程中打开一个连接还是尝试使用同一个连接时。这是错误的压缩版本:

[libprotobuf 错误 google/protobuf/message_lite.cc:123] 无法解析“Hdfs.Internal.RpcResponseHeaderProto”类型的消息,因为它缺少必填字段:callId、状态 [libprotobuf 错误 google/protobuf/message_lite.cc:123]无法解析“Hdfs.Internal.RpcResponseHeaderProto”类型的消息,因为它缺少必填字段:callId、状态 [libprotobuf ERROR google/protobuf/message_lite.cc:123] 无法解析“Hdfs.Internal.RpcResponseHeaderProto”类型的消息” 因为它缺少必填字段:callId,状态 [libprotobuf 错误 google/protobuf/message_lite.cc:123] 无法解析类型为“Hdfs.Internal.RpcResponseHeaderProto”的消息,因为它缺少必填字段:callId,状态 2018- 01-09 21:41:47.939006, p10007, th139965275871040,错误无法在服务器“192.168.0.101:9000”上调用 RPC 调用“getFileInfo”:RpcChannel.cpp:703:HdfsRpcException:RPC 通道到“192.168.0.101:9000”得到协议不匹配:RPC 通道找不到挂起的调用:id = 3.@未知

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_15isfile(_object*, _object*) @ 未知 @ 未知

2018-01-09 21:41:47.939103,P10007,TH139965275871040,信息重试iDempotent rpc呼叫“ getfileinfo”服务器“ getfileinfo” on Server“ 192.168.0.0.0.101:9000在服务器“192.168.0.101:9000”上调用 RPC 调用“getFileInfo”:RpcChannel.cpp:780:HdfsRpcException:RPC 通道到“192.168.0.101:9000”得到协议不匹配:RPC 通道无法解析响应标头。@未知

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_13isdir(_object*, _object*) @ 未知 @ 未知

“192.168.0.101:9000”:RpcChannel.cpp:780:HdfsRpcException:RPC 通道到“192.168.0.101:9000”得到协议不匹配:RPC 通道无法解析响应标头。@未知

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_13isdir(_object*, _object*) @ 未知

“192.168.0.101:9000”:RpcChannel.cpp:780:HdfsRpcException:RPC 通道到“192.168.0.101:9000”得到协议不匹配:RPC 通道无法解析响应标头。@未知

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_13isdir(_object*, _object*) @ 未知

“192.168.0.101:9000”:RpcChannel.cpp:780:HdfsRpcException:RPC 通道到“192.168.0.101:9000”得到协议不匹配:RPC 通道无法解析响应标头。@未知

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_13isdir(_object*, _object*) @ 未知

“192.168.0.101:9000”:RpcChannel.cpp:780:HdfsRpcException:RPC 通道到“192.168.0.101:9000”得到协议不匹配:RPC 通道无法解析响应标头。@未知

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_13isdir(_object*, _object*) @ 未知 @ 未知

2018-01-09 21:41:47.939854,p10010,th139965275871040,INFO 在服务器“192.168.0.101:9000”上重试幂等 RPC 调用“getFileInfo”

2018-01-09 21:41:47.939864,P10013,TH139965275871040,INFO INFO ETRY retry IDEMPOTENT RPC调用“ GetFileInfo”服务器“ ON SERVER” ON SERVER“ 192.168.0.0.0.101:9000服务器“192.168.0.101:9000”上的 RPC 调用“getFileInfo” 2018-01-09 21:41:47.939868,p10012,th139965275871040,INFO 重试服务器“192.168.0.101:9000”上的幂等 RPC 调用“getFileInfo”201-8 09 21:41:47.939868, p10009, th139965275871040, INFO 在服务器 "192.168.0.101:9000" 上重试幂等 RPC 调用 "getFileInfo" 2018-01-09 21:41:47.940813, p10014, th10014, th143996 调用 RPC 失败 "192.168.0.101:9000"服务器“192.168.0.101:9000”上的“getFileInfo”:RpcChannel.cpp:780:HdfsRpcException:RPC 通道到“192.168.0.101:9000" 得到协议不匹配:RPC 通道无法解析响应头。@未知

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_13isdir(_object*, _object*) @ 未知

2018-01-09 21:41:47.940937,P10014,TH139965275871040,INFO INFORETRY IDEMPOTENT RPC CALL“ GetFileInfo” Server“ On Server” On on Server“ 192.168.0.0.0.101:9000在服务器“192.168.0.101:9000”上调用 RPC 调用“getFileInfo”:RpcChannel.cpp:393:HdfsRpcException:无法在服务器“192.168.0.101:9000”上调用 RPC 调用“getFileInfo”@Unknown@Unknown

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_13isdir(_object*, _object*) @ 未知

管道@未知@未知

_object*, 箭头::io::HdfsPathInfo*) @ __pyx_pw_7pyarrow_3lib_16HadoopFileSystem_13isdir(_object*, _object*) @ 未知 @ 未知

2018-01-09 21:41:47.944519, p10011, th139965275871040, INFO 在服务器 "192.168.0.101:9000" 上重试幂等 RPC 调用 "getFileInfo" ------------------ -------------------------------------------------- ------- ArrowIOError Traceback(最近一次调用最后一次)

/home/parquet_sender.pyc in insert_files_parallel(self) 374 # print ('372 sqparquet filepath:', filepath) 375 params_with_path_and_mode = [col_params+(filepath, native) for col_params in pool_params] --> 376 bin_col = self.pool.map (read_binarize, params_with_path_and_mode) 377 got ('map complete') 378 num_rows = bin_col[0][2]

/usr/lib/python2.7/multiprocessing/pool.pyc in map(self, func, iterable, chunksize) 249 ''' 250 assert self._state == RUN --> 251 return self.map_async(func, iterable, chunksize).get() 252 253 def imap(self, func, iterable, chunksize=1):

/usr/lib/python2.7/multiprocessing/pool.pyc in get(self, timeout) 556 return self._value 557 else: --> 558 raise self._value 559 560 def _set(self, i, obj):

ArrowIOError:HDFS:GetPathInfo 失败

我很高兴收到有关此错误原因的任何反馈,以及我应该如何使用并行镶木地板加载。