pyspark 有没有一种有效的方法来改变羽毛文件到 parquet 文件?

xxhby3vn  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(208)

我有一个很大的羽毛文件,我想把它改成 parquet 的,这样我就可以用Pyspark了。有没有比下面更有效的方法来改变文件类型呢?

df = pd.read_feather('file.feather').set_index('date')

df_parquet = df.astype(str)
df_parquet.to_parquet("path/file.gzip",
               compression='gzip')

由于 Dataframe df占用了我的内存,我正在寻找替代方法。

bogh5gae

bogh5gae1#

使用您发布的代码,您正在执行以下转换:
1.将数据从磁盘加载到RAM中;羽化文件已经是Arrow格式。
1.将DataFrame从箭头转换为Pandas
1.将DataFrame从Pandas转换为箭头
1.将DataFrame从Arrow序列化到Parquet中。
步骤2-4都是非常昂贵的步骤。您将无法避免4,但通过将数据保留在Arrow中而不进入panda循环,您可以使用以下代码片段避免2+3:

import pyarrow as pa
import pyarrow.feather as feather
import pyarrow.parquet as pq

table = feather.read_table("file.feather")
pq.write_table(table, "path/file.parquet")

这是个小问题,但您应该避免使用以.gzip结尾的Parquet文件。.gzip/.gz结尾表示整个文件是用gzip压缩的,您可以用gunzip解压缩。这不是用gzip压缩的Parquet文件的情况。Parquet格式会压缩单个段,而不压缩元数据。这导致以高得多的压缩速度进行几乎相同的压缩。因此,压缩算法是实现细节,对其他工具不透明。

相关问题