apache-spark - Spark如何存储Parquet Table?

标签 apache-spark apache-spark-sql

我有一个 10Tb (Parquet) 的事实表,其中包含 100 多个列。当我创建另一个只有事实表中的 10 列且大小为 2TB 的表时。

  1. 我预计大小应该为几 GB,因为我只存储了几 (10) 列?
  2. 我的问题是,当我们拥有更多列时,Parquet 格式是否能以更高效的方式存储?

最佳答案

Parquet 是一种基于列的存储。假设我有一个包含字段 userId、姓名、地址、州、电话号码的表。 在非 Parquet 存储中,如果我执行 select * where state = "TN",它将遍历表中的每条记录(即每行的所有列)并输出与我的 where 条件匹配的记录。然而,在 Parquet 格式中,所有列都存储在一起,因此我不需要遍历所有其他列。同样的选择查询将直接转到'state'列并输出与where条件匹配的记录。 Parquet 有利于更快的检索(更快地获得结果)。总共有多少列并不重要。

Parquet 使用快速压缩。由于所有列都存储在一起,因此压缩非常有效。

关于apache-spark - Spark如何存储Parquet Table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69166135/

相关文章:

python - Spark - 如何从 S3 读取多个具有文件名的多个 Json 文件

apache-spark - 嵌套列上的 DataFrame partitionBy

apache-spark - Spark MLlib LDA,如何推断新的未见文档的主题分布?

postgresql - 如何将 Spark DataFrame 写入 Postgres DB

apache-spark - Spark SQL-Hive “Cannot overwrite table”解决方法

scala - 对数据框中的列(PANCARD)值进行排序

scala - 如何处理spark sql中缺失的列

scala - HDFS目录作为Spark Streaming中的参数

scala - 在 spark 中加入两个 RDD

apache-spark - KafkaConsumer多线程访问pyspark不安全