我试图获取关于我的pyarrow表中两列中的值的不同组合的信息。
我目前正在做的是:
import pandas as pd
import pyarrow as pa
my_table = pa.Table.from_pandas(
pd.DataFrame(
{
'col1':['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'],
'col2':[1,1,2,2,1,1,2,3],
'col3':[1,2,3,4,5,6,7,8]
}
)
)
a = [i.to_numpy().astype('str') for i in my_table.select(['col1', 'col2']).columns]
unique = np.unique(np.array(a), axis = 1)
它返回以下项的预期结果:
unique
>array([['a', 'a', 'b', 'b', 'b'],
['1', '2', '1', '2', '3']], dtype='<U21')
但是对于大table来说这是相当慢的,我希望有更快的方法?
或者,我真正想知道的是,当我试图写一个分区的数据集时,如何提前知道它将写入哪些目录(即,哪些分区在我的表中有一些数据)
编辑:
它可以更快地转换为pandas而不是多个numpy数组,然后使用drop_duplicates()
:
my_table.select(['col1', 'col2']).to_pandas().drop_duplicates()
2条答案
按热度按时间ql3eal8s1#
对结构体直接编码的支持由https://issues.apache.org/jira/browse/ARROW-3978跟踪
同时,这里有一个解决方案,它在计算上类似于pandas的unique-ing功能,但通过使用
pyarrow
自己的计算内核避免了转换到pandas的成本。jtoj6r0c2#
也可以使用聚合函数