标签: pyarrow

在 Python 中检查 Parquet 文件幻数

在 Python 中,我们可以使用方法https://docs.python.org/2/library/zipfile.html验证 zip 文件zipfile.is_zipfile

同样,我想在使用第三方 Parquet 文件之前根据其幻数对其进行验证。是否有一个 API 可以用来验证基于 Magic Number 的 Parquet 文件,如果我不验证,可能会存在安全风险

python parquet pyarrow

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

如何将 pyarrow parquet 数据写入 s3 存储桶?

我创建了一个数据框并使用 pyarrow 将 df 转换为 parquet 文件(此处也提到):

def convert_df_to_parquet(self,df):
    table = pa.Table.from_pandas(df)
    buf = pa.BufferOutputStream()
    pq.write_table(table, buf)
    return buf
Run Code Online (Sandbox Code Playgroud)

现在我想将其上传到 s3 存储桶,并尝试了不同的输入参数,因为upload_file()我尝试过的所有操作都不起作用:

s3_client.upload_file(parquet_file, bucket_name, destination_key)#1st
s3_client.put_object(Bucket=bucket_name, Key=destination_key, Body=parquet_file)#2nd
s3_client.put_object(Bucket=bucket_name, Key=destination_key, Body=parquet_file.getvalue())#3rd
s3_client.put_object(Bucket=bucket_name, Key=destination_key, Body=parquet_file.read1())#4th
Run Code Online (Sandbox Code Playgroud)

错误:

 s3_client.put_object(Bucket=bucket_name, Key=destination_key, Body=parquet_file.read1())
  File "pyarrow/io.pxi", line 376, in pyarrow.lib.NativeFile.read1
  File "pyarrow/io.pxi", line 310, in pyarrow.lib.NativeFile.read
  File "pyarrow/io.pxi", line 320, in pyarrow.lib.NativeFile.read
  File "pyarrow/io.pxi", line 155, in pyarrow.lib.NativeFile.get_input_stream
  File "pyarrow/io.pxi", line 170, in pyarrow.lib.NativeFile._assert_readable
OSError: only valid on readonly files
Run Code Online (Sandbox Code Playgroud)

python amazon-s3 boto3 pyarrow

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

如何设置 pyarrow 表列的“类别”数据类型?

我知道在 parquet 文件中使用category.pandas 编写 pandas 时可以保留类型。DataFrameto_parquet

一开始,就我而言,我已经有一个 pyarrow Table。我可以将其一列设置为具有该category类型吗?如果是,怎么办?(我无法在 Google 和 pyarrow 文档中找到提示)

谢谢你的帮助!最好的,

python parquet pyarrow

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

是否有更惯用的方法来根据列的内容从 PyArrow 表中选择行?

我有一个很大的 PyArrow 表,其中有一列名为index我想用来对表进行分区的列;每个单独的值index代表表中的不同数量。

是否有一种惯用的方法可以根据列的内容从 PyArrow 表中选择行?

这是一个示例表:

import pyarrow as pa
import pyarrow.parquet as pq
import pandas as pd
import numpy as np

# Example table for data schema
irow = np.arange(2**20)
dt = 17
df0 = pd.DataFrame({'timestamp': np.array((irow//2)*dt, dtype=np.int64),
                   'index':     np.array(irow%2, dtype=np.int16),
                   'value':     np.array(irow*0, dtype=np.int32)},
                   columns=['timestamp','index','value'])
ii = df0['index'] == 0
df0.loc[ii,'value'] = irow[ii]//2
ii = df0['index'] == 1
df0.loc[ii,'value'] = (np.sin(df0.loc[ii,'timestamp']*0.01)*10000).astype(np.int32)
table0 = pa.Table.from_pandas(df0)
print(df0)

# prints the following:
         timestamp  index   value
0                0 …
Run Code Online (Sandbox Code Playgroud)

python pyarrow

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

获取 StructType 格式的 Parquet 文件的架构

我正在尝试读取镶木地板文件来保存架构,然后在读取 csv 文件时使用此架构将其分配给数据帧。

fee.parquet该文件loan__fee.csv具有相同的内容,但文件格式不同。

下面是我的代码 - 我收到一个错误,架构应该是“StructType”。如何将从镶木地板文件读取的模式转换为 StructType

from pyarrow.parquet import ParquetFile
import pyarrow.parquet
fee_schema = pyarrow.parquet.read_schema("/dbfs/FileStore/fee.parquet", memory_map=True)

df_mod = spark.read.csv('/FileStore/loan__fee.csv', header="true", schema=fee_schema)
Run Code Online (Sandbox Code Playgroud)

它给出错误:

类型错误:架构应该是 StructType 或字符串

我尝试了几个选项,例如fee_schema.to_string(show_schema_metadata = True)但它不起作用并给出 ParseError。

谢谢你的时间!

apache-spark pyspark databricks pyarrow azure-databricks

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

尝试升级 pyarrow 会导致错误

我运行此命令将 pyarrow 从 2.0.0 升级到 3.0.0:

pip3 install --user --upgrade pyarrow
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

Failed building wheel for pyarrow

...

-- Could NOT find Arrow (missing: Arrow_DIR)
-- Checking for module 'arrow'
--   No package 'arrow' found
CMake Error at /usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find Arrow (missing: ARROW_INCLUDE_DIR ARROW_LIB_DIR
  ARROW_FULL_SO_VERSION ARROW_SO_VERSION)
Call Stack (most recent call first):
  /usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  cmake_modules/FindArrow.cmake:419 (find_package_handle_standard_args)
  cmake_modules/FindArrowPython.cmake:46 (find_package)
  CMakeLists.txt:214 (find_package)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

python upgrade python-3.7 pyarrow

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

日期时间列上的 Pyarrow 子集数据

我一直在尝试使用 pyarrow read_table 读取镶木地板文件并对其进行子集化。

这是代码

import pyarrow.parquet as pq


s3_uri = "Path to s3"
fp = pq.read_table(
            source = s3_uri,
            use_threads = True,
            filters = [('Date_Time' ,'>=','2022-07-08'),('Date_Time' ,'<', '2022-07-09')]
            )
print(fp.to_pandas())
Run Code Online (Sandbox Code Playgroud)

执行上述操作时出现以下错误。

pyarrow.lib.ArrowNotImplementedError:函数greater_equal没有内核匹配的输入类型(数组[timestamp[us]],标量[string])

python pandas parquet pyarrow

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

用pyarrow vs pyspark创建的拼花文件是否兼容?

我必须分两个步骤将JSON中的分析数据转换为实木复合地板。对于大量现有数据,我正在编写一个PySpark作业,并且正在做

df.repartition(*partitionby).write.partitionBy(partitionby).
    mode("append").parquet(output,compression=codec)
Run Code Online (Sandbox Code Playgroud)

但是,对于增量数据,我计划使用AWS Lambda。PySpark可能对它来说是一个过大的杀伤力,因此我打算为此使用PyArrow(我知道它不必要地涉及到Pandas,但我找不到更好的替代方法)。因此,基本上:

import pyarrow.parquet as pq
pq.write_table(table, outputPath, compression='snappy',
    use_deprecated_int96_timestamps=True)
Run Code Online (Sandbox Code Playgroud)

我想知道由PySpark和PyArrow编写的Parquet文件是否兼容(相对于Athena)?

python parquet aws-lambda amazon-athena pyarrow

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

将pandas df转换为parquet-file-bytes-object

我有一个pandas数据框,并希望将其作为拼合文件写入Azure文件存储中。

到目前为止,我还无法将数据帧直接转换为字节,然后可以将其上载到Azure。我当前的解决方法是将其作为拼写文件保存到本地驱动器,然后将其读取为字节对象,然后将其上传到Azure。

谁能告诉我如何将熊猫数据框直接转换为“ parquet file” -bytes对象而无需将其写入磁盘?I / O操作确实在减慢速度,感觉就像是非常丑陋的代码...

# Transform the data_frame into a parquet file on the local drive    
data_frame.to_parquet('temp_p.parquet', engine='auto', compression='snappy')

# Read the parquet file as bytes.
with open("temp_p.parquet", mode='rb') as f:
     fileContent = f.read()

     # Upload the bytes object to Azure
     service.create_file_from_bytes(share_name, file_path, file_name, fileContent, index=0, count=len(fileContent))
Run Code Online (Sandbox Code Playgroud)

我正在寻找实现这样的东西,其中transform_functionality返回一个byte对象:

my_bytes = data_frame.transform_functionality()
service.create_file_from_bytes(share_name, file_path, file_name, my_bytes, index=0, count=len(my_bytes))
Run Code Online (Sandbox Code Playgroud)

python azure pandas pyarrow

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

在字符串数据中,镶木地板文件的 csv 大小是否更大?

我有一个大小等于 170kB 的 csv,当我将它们转换为镶木地板文件时,大小为 1.2MB。数据结构是带有字符串的 12 列。

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

csv_filename = "../files/test.csv"
parquet_filename = '../files/sample.parquet'
chunksize = 1
pqwriter = None
for i, df in enumerate(pd.read_csv(csv_filename, delimiter='_;_', chunksize=chunksize)):
    #df = df.astype(str)
    table = pa.Table.from_pandas(df=df)
    # for the first chunk of records
    if i == 0:
        # create a parquet write object giving it an output file
        pqwriter = pq.ParquetWriter(parquet_filename, table.schema, compression='gzip', use_dictionary=False)
    pqwriter.write_table(table)

# close the parquet writer
if pqwriter: …
Run Code Online (Sandbox Code Playgroud)

python csv pandas parquet pyarrow

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