簡體   English   中英

使用 Dask read parquet 讀取具有不同數據類型(如十進制)的鑲木地板文件時出現問題

[英]Issue while reading a parquet file with different data types like decimal using Dask read parquet

我有一些由 Spark 將 AVRO 文件轉換為 parquet 文件創建的鑲木地板文件。 這些鑲木地板文件包含不同的數據類型,如十進制、整數、字符串、布爾值。 但是當我使用帶有 pyarrow 引擎的 dd.read_parquet 讀取這個文件時,除了 int 之外,其他所有內容都被轉換為對象數據類型,這會導致算術計算出現問題。 我嘗試使用 float dtypes 作為十進制列,但這會降低精度。 知道如何在不失去精度的情況下讀取值嗎?

鑲木地板文件的架構

<pyarrow._parquet.FileMetaData object at >
  created_by: parquet-mr version 1.10.1 (build a89df8f9932b6ef6633d06069e50c9b7970bebd1)
  num_columns: 7
  num_rows: 1
  num_row_groups: 1
  format_version: 1.0
  serialized_size: 4376 
ID: string
CODE: string
CURRENCY: string
DEDUCT: decimal(20, 2)
PERCENT: decimal(11, 10)
MIN_DEDUCT: decimal(20, 2)
MAX_DEDUCT: decimal(20, 2)

元數據

{b'org.apache.spark.sql.parquet.row.metadata': b'{"type":"struct","fields":[{'
                                           b'"name":"ID","'
                                           b'type":"string","nullable":tr'
                                           b'ue,"metadata":{}},{"name":"'
                                           b'CODE","typ'
                                           b'e":"string","nullable":true,'
                                           b'"metadata":{}},{"name":"'
                                           b'CURRENCY","typ'
                                           b'e":"string","nullable":true,'
                                           b'"metadata":{}},{"name":"DEDU'
                                           b'CT","type":"decimal(20,2'
                                           b')","nullable":true,"metadata'
                                           b'":{}},{"name":"'
                                           b'DEDUCT","'
                                           b'type":"decimal(11,10)","null'
                                           b'able":true,"metadata":{}},{"'
                                           b'name":"MIN_DEDUCT","'
                                           b'type":"decimal(20,2)","nulla'
                                           b'ble":true,"metadata":{}},{"n'
                                           b'ame":"MAX_DEDUCT","t'
                                           b'ype":"decimal(20,2)","nullab'
                                           b'le":true,"metadata":{}}]}'}

我不相信您會因為對兩位小數列使用浮點(雙精度,64 位)而失去精度,盡管您得到略有不同的值。

對於列 PERCENT,您仍然應該是完全安全的,盡管它不太明顯。 無論如何,我希望這是一個估計值。

盡管 python 確實有一個十進制類型,它能夠進行計算,但箭頭並不表示這一點(numpy 也不表示),除非是效率低下的 python 對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM