duckdb和pyarrow讀寫arrow格式的方法

arrow格式被多種分析型數據引擎廣泛采用,如datafusion、polars。duckdb有一個arrow插件,原來是core插件,1.3版后被廢棄,改為社區級插件,名字改為nanoarrow, 別名還叫arrow。

安裝

D install arrow from community;
D copy (from 'foods.csv') to 'foods.arrow';
D load arrow;
D from 'foods.arrow';
IO Error:
Expected continuation token (0xFFFFFFFF) but got 1702125923
D from read_csv('foods.arrow');
┌────────────┬──────────┬────────┬──────────┐
│  category  │ calories │ fats_g │ sugars_g │
│  varchar   │  int64   │ double │  int64   │
├────────────┼──────────┼────────┼──────────┤
│ vegetables │       450.52 │
│ seafood    │      1505.00 │D copy (from 'foods.csv') to 'foods2.arrow';
D from 'foods2.arrow' limit 4;
┌────────────┬──────────┬────────┬──────────┐
│  category  │ calories │ fats_g │ sugars_g │
│  varchar   │  int64   │ double │  int64   │
├────────────┼──────────┼────────┼──────────┤
│ vegetables │       450.52 │
│ seafood    │      1505.00 │
│ meat       │      1005.00 │
│ fruit      │       600.011 │
└────────────┴──────────┴────────┴──────────┘

注意安裝arrow插件后不會自動加載,所以加載arrow插件前生成的foods.arrow實際上是csv格式,而foods2.arrow才是arrow格式。

python的pyarrow模塊也支持讀寫arrow格式,但是它不能識別duckdb生成的arrow文件,它還能生成其他格式文件,比如parquet和feather。以下示例來自arrow文檔。

>>> import pandas as pd
>>> import pyarrow as pa
>>> with pa.memory_map('foods2.arrow', 'r') as source:
...     loaded_arrays = pa.ipc.open_file(source).read_all()
...
Traceback (most recent call last):File "<python-input-11>", line 2, in <module>loaded_arrays = pa.ipc.open_file(source).read_all()~~~~~~~~~~~~~~~~^^^^^^^^File "C:\Users\lt\AppData\Local\Programs\Python\Python313\Lib\site-packages\pyarrow\ipc.py", line 234, in open_filereturn RecordBatchFileReader(source, footer_offset=footer_offset,options=options, memory_pool=memory_pool)File "C:\Users\lt\AppData\Local\Programs\Python\Python313\Lib\site-packages\pyarrow\ipc.py", line 110, in __init__self._open(source, footer_offset=footer_offset,~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^options=options, memory_pool=memory_pool)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "pyarrow\\ipc.pxi", line 1090, in pyarrow.lib._RecordBatchFileReader._openFile "pyarrow\\error.pxi", line 155, in pyarrow.lib.pyarrow_internal_check_statusFile "pyarrow\\error.pxi", line 92, in pyarrow.lib.check_status
pyarrow.lib.ArrowInvalid: Not an Arrow file>>> import pyarrow.parquet as pq
>>> import pyarrow.feather as ft
>>> dir(pq)
['ColumnChunkMetaData', 'ColumnSchema', 'FileDecryptionProperties', 'FileEncryptionProperties', 'FileMetaData', 'ParquetDataset', 'ParquetFile', 'ParquetLogicalType', 'ParquetReader', 'ParquetSchema', 'ParquetWriter', 'RowGroupMetaData', 'SortingColumn', 'Statistics', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_filters_to_expression', 'core', 'filters_to_expression', 'read_metadata', 'read_pandas', 'read_schema', 'read_table', 'write_metadata', 'write_table', 'write_to_dataset']
>>> dir(ft)
['Codec', 'FeatherDataset', 'FeatherError', 'Table', '_FEATHER_SUPPORTED_CODECS', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_feather', '_pandas_api', 'check_chunked_overflow', 'concat_tables', 'ext', 'os', 'read_feather', 'read_table', 'schema', 'write_feather']
>>> import numpy as np
>>> arr = pa.array(np.arange(10))
>>> schema = pa.schema([
...     pa.field('nums', arr.type)
... ])
>>> with pa.OSFile('arraydata.arrow', 'wb') as sink:
...     with pa.ipc.new_file(sink, schema=schema) as writer:
...         batch = pa.record_batch([arr], schema=schema)
...         writer.write(batch)
...
>>> with pa.memory_map('arraydata.arrow', 'r') as source:
...     loaded_arrays = pa.ipc.open_file(source).read_all()
...
>>> arr2= loaded_arrays[0]
>>> arr
<pyarrow.lib.Int64Array object at 0x000001A3D8FD9FC0>
[0,1,2,3,4,5,6,7,8,9
]
>>> arr2
<pyarrow.lib.ChunkedArray object at 0x000001A3D8FD9C00>
[[0,1,2,3,4,5,6,7,8,9]
]
>>> table = pa.Table.from_arrays([arr], names=["col1"])
>>> ft.write_feather(table, 'example.feather')
>>> table
pyarrow.Table
col1: int64
----
col1: [[0,1,2,3,4,5,6,7,8,9]]
>>> table2= ft.read_table("example.feather")
>>> table2
pyarrow.Table
col1: int64
----
col1: [[0,1,2,3,4,5,6,7,8,9]]

從上述例子可見,arrow文件讀出的結構和寫入前有區別,從pyarrow.lib.Int64Array變成了pyarrow.lib.ChunkedArray,也多嵌套了一層。feather格式倒是讀寫前后一致。

pyarrow生成的arrow文件能被duckdb讀取,如下所示。

D load arrow;
D from 'arraydata.arrow';
┌───────┐
│ nums  │
│ int64 │
├───────┤
│     0 │
│     1 │
│     2 │
│     3 │
│     4 │
│     5 │
│     6 │
│     7 │
│     8 │
│     9 │
└───────┘

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89096.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89096.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89096.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器人位姿變換的坐標系相對性:左乘法則與右乘法則解析?

文章目錄1. 全局坐標系下機器人位姿更新的左乘法則?2. 局部坐標系下機器人位姿增量更新的右乘法則?3. 相對位姿的計算3.1. 基于世界坐標系&#xff08;全局變換&#xff09;3.2. 基于 t1t_1t1? 時刻相機的局部坐標系&#xff08;局部變換&#xff09;3.3. 兩者區別設機器人當…

代碼隨想錄算法訓練營65期第20天

代碼隨想錄算法訓練營65期第20天 本文中使用到一些代碼隨想錄里面的圖片或者鏈接&#xff0c;在這里致敬程序員Carl 二叉搜索樹的最近公共祖先 相對于 二叉樹的最近公共祖先 本題就簡單一些了&#xff0c;因為 可以利用二叉搜索樹的特性。 題目鏈接&#xff1a;代碼隨想錄&…

LLaMA.cpp HTTP 服務參數: --pooling 嵌入模型 池化類型詳解

LLaMA.cpp HTTP 服務參數: --pooling 嵌入模型 池化類型詳解 --pooling {none,mean,cls,last,rank} 在 llama.cpp 的 embedding server 中&#xff0c;--pooling {none,mean,cls,last,rank} 參數用于指定 如何將輸入文本的 token 級嵌入向量聚合為句向量。以下是各選項的詳細解…

「日拱一碼」027 深度學習庫——PyTorch Geometric(PyG)

目錄 數據處理與轉換 數據表示 數據加載 數據轉換 特征歸一化 添加自環 隨機擾動 組合轉換 圖神經網絡層 圖卷積層&#xff08;GCNConv&#xff09; 圖注意力層&#xff08;GATConv&#xff09; 池化 全局池化&#xff08;Global Pooling&#xff09; 全局平均池…

IoC容器深度解析:架構、原理與實現

&#x1f31f; IoC容器深度解析&#xff1a;架構、原理與實現 引用&#xff1a; .NET IoC容器原理與實現等巫山的雲彩都消散撒下的碧色如何看淡 &#x1f50d; 一、引言&#xff1a;從服務定位器到IoC的演進 #mermaid-svg-BmRIuI4iMgiUqFVN {font-family:"trebuchet ms&…

從零開始學前端html篇3

表單基本結構表單是 HTML 中用于創建用戶輸入區域的標簽。它允許用戶輸入數據&#xff08;例如文本、選擇選項、文件等&#xff09;&#xff0c;并將這些數據提交到服務器進行處理。<form>&#xff0c;表單標簽&#xff0c;用于創建表單常用屬性&#xff1a;action&#…

Linux系統調優和工具

Linux系統調優和問題定位需要掌握一系列強大的工具&#xff0c;涵蓋系統監控、性能分析、故障排查等多個方面。以下是一些核心工具和它們的典型應用場景&#xff0c;分類整理如下&#xff1a; 一、系統資源監控&#xff08;實時概覽&#xff09;top / htop 功能&#xff1a; 實…

如何快速有效地在WordPress中添加Instagram動態

在當今社交媒體的時代&#xff0c;通過展示Instagram的最新動態&#xff0c;可以有效吸引讀者的目光&#xff0c;同時豐富網站內容。很多人想知道&#xff0c;如何把自己精心運營的Instagram內容無縫嵌入WordPress網站呢&#xff1f;別擔心&#xff0c;操作并不復雜&#xff0c…

spring容器加載工具類

在Spring框架中&#xff0c;工具類通常不需要被Spring容器管理&#xff0c;但如果確實需要獲取Spring容器中的Bean實例&#xff0c;可以通過靜態方法設置和獲取ApplicationContext。下面是一個典型的Spring容器加載工具類的實現&#xff1a;這個工具類通過實現ApplicationConte…

定時器更新中斷與串口中斷

問題&#xff1a;我想把打印姿態傳感器的角度&#xff0c;但是重定向的打印函數突然打印不出來。嘗試&#xff1a;我懷疑是優先級的問題&#xff0c;故調整了串口&#xff0c;定時器&#xff0c;dma的優先級可是發現調了還是沒有用&#xff0c;最終發現&#xff0c;我把定時器中…

用Python向PDF添加文本:精確插入文本到PDF文檔

PDF 文檔的版式特性使其適用于輸出不可變格式的報告與合同。但若要在此類文檔中插入或修改文本&#xff0c;常規方式難以實現。借助Python&#xff0c;我們可以高效地向 PDF 添加文本&#xff0c;實現從文檔生成到內容管理的自動化流程。 本文將從以下方面介紹Python實現PDF中…

Quick API:賦能能源行業,化解數據痛點

隨著全球能源結構的轉型和數字化的深入推進&#xff0c;能源行業正面臨前所未有的機遇與挑戰。海量的實時數據、復雜的業務系統、以及對數據安全和高效利用的迫切需求&#xff0c;都成為了能源企業在數字化轉型道路上的核心痛點。本文將深入探討麥聰Quick API如何憑借其獨特優勢…

Google Chrome V8< 13.6.86 類型混淆漏洞

【高危】Google Chrome V8< 13.6.86 類型混淆漏洞 漏洞描述 Google Chrome 是美國谷歌&#xff08;Google&#xff09;公司的一款Web瀏覽器&#xff0c;V8 是 Google 開發的高性能開源 JavaScript 和 WebAssembly 引擎&#xff0c;廣泛應用于 Chrome 瀏覽器和 Node.js 等環…

力扣經典算法篇-23-環形鏈表(哈希映射法,快慢指針法)

1、題干 給你一個鏈表的頭節點 head &#xff0c;判斷鏈表中是否有環。 如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表中的環&#xff0c;評測系統內部使用整數 pos 來表示鏈表尾連接到鏈表中的位置&…

HarmonyOS DevEco Studio 小技巧 42 - 鴻蒙單向數據流

在鴻蒙應用開發中&#xff0c;狀態管理是構建響應式界面的核心支柱&#xff0c;而 單向數據流&#xff08;Unidirectional Data Flow, UDF&#xff09;作為鴻蒙架構的重要設計原則&#xff0c;貫穿于組件通信、狀態更新和界面渲染的全流程。本文將結合鴻蒙 ArkUI 框架特性&…

【LeetCode 3136. 有效單詞】解析

目錄LeetCode中國站原文原始題目題目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;講解化繁為簡&#xff1a;如何優雅地“盤”邏輯判斷題第一部分&#xff1a;算法思想 —— “清單核對”與“一票否決”第二部分&#xff1a;代碼實現 —— 清晰…

前端面試專欄-算法篇:24. 算法時間與空間復雜度分析

&#x1f525; 歡迎來到前端面試通關指南專欄&#xff01;從js精講到框架到實戰&#xff0c;漸進系統化學習&#xff0c;堅持解鎖新技能&#xff0c;祝你輕松拿下心儀offer。 前端面試通關指南專欄主頁 前端面試專欄規劃詳情 算法時間與空間復雜度分析&#xff1a;從理論到實踐…

bash中||與的區別

在 Bash 中&#xff0c;|| 和 && 是兩種常用的邏輯操作符&#xff0c;用于控制命令的執行流程。它們的核心區別如下&#xff1a;1. ||&#xff08;邏輯 OR&#xff09; 作用&#xff1a;如果前一個命令失敗&#xff08;返回非零退出碼&#xff09;&#xff0c;則執行后…

OpenCV實現感知哈希(Perceptual Hash)算法的類cv::img_hash::PHash

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 PHash是OpenCV中實現感知哈希&#xff08;Perceptual Hash&#xff09;算法的類。該算法用于快速比較圖像的視覺相似性。它將圖像壓縮為一個簡短的…

數據庫遷移人大金倉數據庫

遷移前的準備工作 安裝官方的kdts和KStudio工具 方案說明 一、數據庫遷移&#xff1a;可以使用kdts進行數據庫的按照先遷移表結構、后數據的順序遷移&#xff08;kdts的使用可以參考官方文檔&#xff09; 其他參考文檔 人大金倉官網&#xff1a;https://download.kingbase…