我需要使用pyspark(在Azure中)处理从生产oltp系统生成的平面文件,并最终(在操作之后)写出到Snowflake数据仓库中; Snowflake pyspark连接器仅支持spark数据框API。
由于这些平面文件的大小都超过300GB,因此我不得不对其进行压缩。目前,我正在使用gzip进行压缩,但是遇到了不可避免的问题,即火花处理单线程gzip文件。
为了使Spark并行读取,我不得不在检索文件后将其拆分。由于这些文件是文本文件,因此我不得不将它们拆分为换行符-为此,我必须读入文件,填充缓冲区,然后写出预定大小的文件。
必须读入整个文件-严重影响向云中传送文件(Azure Blob存储)所需的时间。
随着我公司对数据的需求日益增长-越来越多的核心OLTP表被添加到组合中,并且它正在推动完成时间越来越长。请记住,其中绝大部分内容都必须纳入分析,应该每天早上9点交付-我在解决这个问题上确实很辛苦。
请记住,我无法控制文件的格式-压缩这些文件的最佳方法是什么,从而不会将所有内容强制压缩到Spark中的单个工作线程?
我已经阅读过lz4,bz2和snappy都是可拆分的-但是找到了关于如何在不使用tar之类的容器的情况下进行此操作的稀有文档-再次Spark本身并不支持。
问题的症结在于缺乏对oltp系统的控制,如果它在我的控制范围内-我会把它放到镶木地板文件上