[英]Segmentation Fault while reading parquet file from AWS S3 using read_parquet in Python Pandas
[英]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.