Spark结构化API数据源——高级IO概念

一、可分割的文件类型和压缩

某些文件格式是可分割的,因此Spark可以只获取该文件中的满足查询条件的某一个部分,无需读取整个文件,从而提高读取效率。存储数据的方式对Spark作业稳定运行至关重要,推荐采用gzip压缩格式的Parquet文件格式

二、并行读取数据

多个执行器不能同时读取同一个文件,但可以同时读取不同的文件。通常,这意味着你从包含多个文件的文件夹中读取时,每个文件都将被视为DataFrame的一个分片,并由执行器并行读取,多余的文件会进入读取队列等候

三、并行写数据

写数据涉及的文件数量取决于DataFrame的分区数,默认情况是每个数据分片都会有一定的数据写入,这意味着虽然我们指定的是一个文件,但实际上它是由一个文件夹中的多个文件组成,每个文件对应着一个数据分片

  • 数据划分

将文件写出时,可以将列编码为文件夹,这样在之后读取时可跳过大量数据,只读入与数据相关的列数据而不必扫描整个数据集。

csvFile.limit(10).write.mode("overwrite").partitionBy("DEST_COUNTRY_NAME")
.save("/tmp/partitioned-files.parquet")
  • 数据分桶

数据分桶是另一种文件组织方法,你可以使用该方法控制写入每个文件的数据。具有相同桶ID(哈希分桶的ID)的数据将放置到一个物理分区中,这样可以避免在稍后读取数据时进行shuffle。Spark分桶仅支持Spark管理的表

四、写入复杂类型

并不是每种数据文件格式都支持这些内部类型。例如CSV文件不支持复杂类型,而Parquet和ORC文件则支持复杂类型

五、管理文件大小

Spark特别不适合处理大量的小文件

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容