标签: pyarrow

在不读取文件的情况下使用拼花文件统计信息

据我了解,镶木地板文件具有列的最小/最大统计信息。我的问题是如何在不读取整个文件的情况下使用 python 读取这些统计信息?

如果有帮助,我也有_common_metadata_metadata文件。


我的具体问题是获取此文件系统中每个证券交易所分区的最大日期(每个年份分区包含多个具有日期列的镶木地板文件):

C:.
?   _common_metadata
?   _metadata
????source=NASDAQ
?   ????year=2017
?   ????year=2018
????source=London_Stock_Exchange
?   ????year=2014
?   ????year=2015
????source=Japan_Exchange_Group
?   ????year=2017
?   ????year=2018
????source=Euronext
    ????year=2017
    ????year=2018
Run Code Online (Sandbox Code Playgroud)

python parquet dask fastparquet pyarrow

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

Python:模块“pyarrow”没有属性“orc”

我已经安装了pyarrowpip

pip install pyarrow

import pyarrow as pya
Run Code Online (Sandbox Code Playgroud)

如果我调用该属性,orc则会出现以下错误

pya.orc
AttributeError: module 'pyarrow' has no attribute 'orc'
Run Code Online (Sandbox Code Playgroud)

python pyarrow

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

pyarrow数据集多条件过滤

我有一个分区镶木地板数据集,我正在尝试将其读入 pandas 数据帧。完整的镶木地板数据集不适合内存,因此我只需选择一些分区(分区列是年、月和日期。我有以下内容:

pd.read_parquet(
    path_to_dataset,
    filters=[("Date", ">=", "20200715"), ("Date", "<=", "2020804")]
)
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,出现内存错误/python 程序崩溃。但是,当我运行以下命令时,它可以正常工作,即使理论上它会返回完全相同数量的数据(我的数据集在 4 号停止)。

pd.read_parquet(
    path_to_dataset,
    filters=[("Date", ">=", "20200715")]
)
Run Code Online (Sandbox Code Playgroud)

似乎第二个过滤器("Date", "<=", "2020804")优先于第一个过滤器,并且不被视为复合表达式。在我当前的用例中,我可以删除第二个过滤器,但在其他情况下,数据将更多地位于总范围的中间,如果没有第二个过滤器,我最终会再次读取太多内容。

我尝试了以下每一项,但没有运气。

(("Date", ">=", "20200715") & ("Date", "<=", "2020804"))
("Date", ">=", "20200715", "Date", "<=", "2020804")
Run Code Online (Sandbox Code Playgroud)

有没有办法处理同一分区/列上的复合表达式?

此处参考文档: https: //arrow.apache.org/docs/python/dataset.html

python parquet pyarrow

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

RUN apk add --update --no-cache py3-arrow 在 alpine docker 镜像中不起作用

我从以下位置构建了一个图像: https: //archive.apache.org/dist/spark/spark-$2.4.4/spark-$2.4.4-bin-hadoop2.7.tgz

下载后,我会:

cd spark-2.4.4-bin-hadoop2.7 && bin/docker-image-tool.sh build
Run Code Online (Sandbox Code Playgroud)

然后我的形象spark-py:latest就建立了。

我想使用这个 docker 文件在其中安装 pyarrow:

FROM spark-py:latest
COPY *.jar /opt/spark/jars/
RUN rm /opt/spark/jars/kubernetes-*-4.1.2.jar

RUN apk add --no-cache \
            build-base \
            cmake \
            bash \
            boost-dev \
            autoconf \
            zlib-dev \
            flex \
            bison \
            g++ 
           
RUN wget -q https://bootstrap.pypa.io/get-pip.py && python3 get-pip.py && rm -f get-pip.py
RUN apk update
RUN apk add --update --no-cache py3-arrow 

Run Code Online (Sandbox Code Playgroud)

但我有一个错误:

> [8/8] RUN apk add --update --no-cache py3-arrow:
#12 0.552 fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
#12 …
Run Code Online (Sandbox Code Playgroud)

docker kubernetes pyarrow

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

我可以使用 pyarrow 加载多个 csv 文件吗?

我知道这可以在 R 中完成,如下所示

ds <- open_dataset("nyc-taxi/csv/2019", format = "csv",
  partitioning = "month")
Run Code Online (Sandbox Code Playgroud)

但是有没有办法用Python来做呢?尝试过这些,但似乎这不是一个选择

from pyarrow import csv
table = csv.read_csv("*.csv")
Run Code Online (Sandbox Code Playgroud)
from pyarrow import csv
path = os.getcwd()
table = csv.read_csv(path)
table
Run Code Online (Sandbox Code Playgroud)

有没有办法让它在 python 中发生?

python csv apache-arrow pyarrow

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

Python bigquery lib错误“pyarrow”没有属性“decimal256”

AttributeError: module 'pyarrow' has no attribute 'decimal256' 似乎是bigquery python包的错误,应该如何处理?

整个堆栈是:

  File "/opt/conda/default/lib/python3.7/site-packages/google/cloud/bigquery/__init__.py", line 35, in <module>
    from google.cloud.bigquery.client import Client
  File "/opt/conda/default/lib/python3.7/site-packages/google/cloud/bigquery/client.py", line 70, in <module>
    from google.cloud.bigquery import _pandas_helpers
  File "/opt/conda/default/lib/python3.7/site-packages/google/cloud/bigquery/_pandas_helpers.py", line 151, in <module>
    pyarrow.decimal256(76, scale=38).id: "BIGNUMERIC",
AttributeError: module 'pyarrow' has no attribute 'decimal256'
Run Code Online (Sandbox Code Playgroud)

python google-bigquery pyspark pyarrow

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

如何将 pandas float64 类型转换为 NUMERIC Bigquery 类型?

我有一个熊猫数据框 df:

<bound method NDFrame.head of                  DAT_RUN          DAT_FORECAST LIB_SOURCE  MES_LONGITUDE  MES_LATITUDE  MES_TEMPERATURE  MES_HUMIDITE  MES_PLUIE  MES_VITESSE_VENT  MES_U_WIND  MES_V_WIND
0   2022-03-29T00:00:00Z  2022-03-29T01:00:00Z    gfs_025          43.50          3.75        11.994824          72.0        0.0          2.653137   -2.402910   -1.124792
1   2022-03-29T00:00:00Z  2022-03-29T01:00:00Z    gfs_025          43.50          4.00        13.094824          74.3        0.0          2.976434   -2.972910   -0.144792
2   2022-03-29T00:00:00Z  2022-03-29T01:00:00Z    gfs_025          43.50          4.25        12.594824          75.3        0.0          3.128418   -2.702910    1.575208
3   2022-03-29T00:00:00Z  2022-03-29T01:00:00Z    gfs_025          43.50          4.50        12.094824          75.5        0.0          3.183418   -2.342910    2.155208
Run Code Online (Sandbox Code Playgroud)

我将 DAT_RUN 和 DAT_FORECAST 列转换为日期时间格式:

df["DAT_RUN"]           = pd.to_datetime(df['DAT_RUN'],      format="%Y-%m-%dT%H:%M:%SZ") # previously "%Y-%m-%d %H:%M:%S"
df["DAT_FORECAST"]      = …
Run Code Online (Sandbox Code Playgroud)

pandas google-bigquery pyarrow

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

r 箭头架构更新

.csv我尝试读取多个文件arrow::open_dataset(),但由于列类型不一致而引发错误。

我发现这个问题主要与我的问题有关,但我正在尝试一种稍微不同的方法。

  1. 我想使用arrow一个示例 CSV 文件来利用类型的自动检测。弄清楚所有类型的列非常耗时。

  2. 然后,我采用架构并更正一些导致问题的列。

  3. 然后我使用更新后的架构来读取所有文件。

以下是我的方法:

data = read_csv_arrow('data.csv.gz', as_data_frame = F) # has more than 30 columns
sch = data$schema
print(sch)
Run Code Online (Sandbox Code Playgroud)
Schema
trade_id: int64
secid: int64
side: int64
...
nonstd: int64
flags: string
Run Code Online (Sandbox Code Playgroud)

我想将'trade_id'列类型从int64更改为string并将其他列保持不变。

如何更新架构?

我正在使用 R arrow,但我想相关的答案pyarrow可能适用。

r apache-arrow pyarrow

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

arrow::py::import_pyarrow() 导致分段错误

我正在尝试使用 arrow-cpp 构建一个表,然后将其传输回 python。

为了做到这一点,我需要事先调用 arrow::py::import_pyarrow() ,但这会导致 SEGFAULT。

谁能帮我找出我哪里做错了?

这是一个最小的例子

CMakeLists.txt

cmake_minimum_required(VERSION 3.20.0)
project(TEST)
set(CMAKE_CXX_STANDARD 17)
set(Python3_EXECUTABLE "/home/auderson/miniconda3/bin/python3.8")

list(APPEND CMAKE_PREFIX_PATH "/home/auderson/miniconda3/lib/cmake/arrow")
find_package(Arrow REQUIRED)
find_package(ArrowPython REQUIRED)
find_package(Python3 COMPONENTS Interpreter Development)


include_directories(.
        /home/auderson/miniconda3/lib/python3.8/site-packages/pyarrow/include
        ${Python3_INCLUDE_DIRS})

add_executable(TEST
        mini_t.cpp
        )

target_link_libraries(${PROJECT_NAME} PRIVATE arrow_shared)
target_link_libraries(${PROJECT_NAME} PRIVATE arrow_python_shared)
target_link_libraries(${PROJECT_NAME} PRIVATE ${Python3_LIBRARIES})

Run Code Online (Sandbox Code Playgroud)

.cpp文件


#include "arrow/python/pyarrow.h"

int main() {
    return arrow::py::import_pyarrow();
}


Run Code Online (Sandbox Code Playgroud)

输出(调试模式)

Signal: SIGSEGV (Segmentation fault)

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

如果不在调试模式:

Process finished with exit code 139
Run Code Online (Sandbox Code Playgroud)

箭头的其他功能工作得很好。

c++ python-3.x apache-arrow pyarrow

0
推荐指数
1
解决办法
1021
查看次数

如何查询Arrow数据集的元数据?是否允许行分区?

对于不断增加的数据库来说,Arrow 的数据集功能是一个很好的工具,即使数据被分区和压缩,人们也希望不断向其中添加更多数据。我已经能够成功地将数据分区到列中,从而使过滤和查询速度更快。但是 Arrow 是否允许按行组进行分区?

文档没有详细解释这一点,我的目标是按行分区,然后能够查询这些分区的元数据[最高值,最低值]。箭允许这样做吗?

到目前为止我已经尝试过片段

fragments = list(dataset.get_fragments())
fragments[0].split_by_row_group()
Run Code Online (Sandbox Code Playgroud)

然而,这只是给我返回由列分区创建的文件夹结构中的文件。

parquet pyarrow

0
推荐指数
1
解决办法
436
查看次数