我正在尝试使用 Dask 编写镶木地板文件。目标是使用它的repartition功能,但似乎我无法写出一个简单的镶木地板文件,而不进行这repartition一步......
这是我用来从 pyarrow 创建 parquet 文件的代码,通过 dask 读回它,然后再次写入。
import pandas as pd
import numpy as np
import pyarrow as pa
import pyarrow.parquet as pq
import dask.dataframe as dd
file = 'example.parquet'
file_res = 'example_res.parquet'
# Generate a random df
df = pd.DataFrame(np.random.randint(100,size=(100000, 20)),columns=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T'])
# Write 1st parquet file with pyarrow
table = pa.Table.from_pandas(df)
pq.write_table(table, file, version='1.0')
# Read it back with Dask, and write it again
dd_df = dd.read_parquet(file)
dd_df.to_parquet(file_res)
Run Code Online (Sandbox Code Playgroud)
最后一个写入步骤以 结束TypeError: expected …
正如标题所述,我想通过使用 pyarrow 并写入多个镶木地板文件,按大小(或行组大小)重新分区 pyarrow 表。
我查看了 pyarrow 文档,并确定了分区数据集章节,这似乎是一个方向。不幸的是,它表明可以按列内容分区,但不能按大小(或行组大小)分区。
那么,从一张表开始,如何控制写入步骤,以便以受控大小 x MB 写入多个文件?(或行组大小)
import pandas as pd
import numpy as np
import pyarrow as pa
import pyarrow.parquet as pq
file = 'example.parquet'
file_res = 'example_res'
# Generate a random df
df = pd.DataFrame(np.random.randint(100,size=(100000, 20)),columns=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T'])
table = pa.Table.from_pandas(df)
# With this command, I can write a single parquet file that contains 2 row groups.
pq.write_table(table, file, version='2.0', row_group_size=50000)
# I can read it back and try to write it as a partitioned …Run Code Online (Sandbox Code Playgroud) 使用 pandas,我想应用可用于 resample() 的函数,但不适用于rolling()。
这有效:
df1 = df.resample(to_freq,
closed='left',
kind='period',
).agg(OrderedDict([('Open', 'first'),
('Close', 'last'),
]))
Run Code Online (Sandbox Code Playgroud)
这不会:
df2 = df.rolling(my_indexer).agg(
OrderedDict([('Open', 'first'),
('Close', 'last') ]))
>>> AttributeError: 'first' is not a valid function for 'Rolling' object
df3 = df.rolling(my_indexer).agg(
OrderedDict([
('Close', 'last') ]))
>>> AttributeError: 'last' is not a valid function for 'Rolling' object
Run Code Online (Sandbox Code Playgroud)
您对将滚动窗口的第一个和最后一个值保留在两个不同的列中有何建议?
import pandas as pd
from random import seed
from random import randint
from collections import OrderedDict
# DataFrame
ts_1h = pd.date_range(start='2020-01-01 …Run Code Online (Sandbox Code Playgroud) 我知道在 parquet 文件中使用category.pandas 编写 pandas 时可以保留类型。DataFrameto_parquet
一开始,就我而言,我已经有一个 pyarrow Table。我可以将其一列设置为具有该category类型吗?如果是,怎么办?(我无法在 Google 和 pyarrow 文档中找到提示)
谢谢你的帮助!最好的,