美文网首页
Spark结构化API数据源——高级IO概念

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

作者: lukeyan | 来源:发表于2021-03-30 20:32 被阅读0次

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

    某些文件格式是可分割的,因此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特别不适合处理大量的小文件

    相关文章

      网友评论

          本文标题:Spark结构化API数据源——高级IO概念

          本文链接:https://www.haomeiwen.com/subject/tkyihltx.html