【发布时间】:2021-09-03 23:56:09
【问题描述】:
我为 pandas、numpy 和 spark 标签发布此内容,因为我不确定在这三个系统中解决此问题的最佳方法。
我有一个大型 parquet 文件,下游进程无法打开它,因为它超出了系统的内存(如果一次打开,内存中约 63gb)。我是这样写文件的:
FULL_MAIN.write.mode("overwrite").parquet(PATH+"/FULL_MAIN.parquet")
但是文件太大了,所以我尝试这样做以将文件分成更小的夹头:
split_factor = [.1,.1,.1,.1,.1,.1,.1,.1,.1,.1]
FULL_MAIN_RDD1,FULL_MAIN_RDD2,FULL_MAIN_RDD3,FULL_MAIN_RDD4,FULL_MAIN_RDD5, FULL_MAIN_RDD6,FULL_MAIN_RDD7,FULL_MAIN_RDD8,FULL_MAIN_RDD9,FULL_MAIN_RDD10 = FULL_MAIN.randomSplit(split_factor)
FULL_MAIN_RDD1.write.mode("overwrite").parquet(PATH+"/FULL_MAIN_RDD1.parquet")
FULL_MAIN_RDD2.write.mode("overwrite").parquet(PATH+"/FULL_MAIN_RDD2.parquet")
...
这种方法的问题是我需要其他数据帧来保持行对齐,并且进行这种随机拆分会使数据帧不对齐。
所以我的两个问题是:
- 当我的数据集中的每一行都没有任何行号或数字计数器时,是否可以按相对相等的数量拆分多个数据帧?
- 有没有办法在 pandas 或 numpy 中批量读取 parquet 文件?这基本上可以解决我在下游系统上的问题。我不知道如何分批打开镶木地板(我试图在 pandas 中打开它,然后拆分行并保存每个文件,但是当我加载数据框时它会导致我的系统崩溃)。我不确定是否可以不超出内存。
【问题讨论】:
标签: pandas numpy apache-spark pyspark parquet