在 Python 中,我们可以使用方法https://docs.python.org/2/library/zipfile.html验证 zip 文件zipfile.is_zipfile
同样,我想在使用第三方 Parquet 文件之前根据其幻数对其进行验证。是否有一个 API 可以用来验证基于 Magic Number 的 Parquet 文件,如果我不验证,可能会存在安全风险
我创建了一个数据框并使用 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) 我知道在 parquet 文件中使用category.pandas 编写 pandas 时可以保留类型。DataFrameto_parquet
一开始,就我而言,我已经有一个 pyarrow Table。我可以将其一列设置为具有该category类型吗?如果是,怎么办?(我无法在 Google 和 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) 我正在尝试读取镶木地板文件来保存架构,然后在读取 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。
谢谢你的时间!
我运行此命令将 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)
我该如何解决这个问题?
我一直在尝试使用 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])
我必须分两个步骤将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)?
我有一个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) 我有一个大小等于 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) pyarrow ×10
python ×9
parquet ×5
pandas ×3
amazon-s3 ×1
apache-spark ×1
aws-lambda ×1
azure ×1
boto3 ×1
csv ×1
databricks ×1
pyspark ×1
python-3.7 ×1
upgrade ×1