【问题标题】:Pyspark dataframe parquet vs delta : different number of rowsPyspark dataframe parquet vs delta:不同的行数
【发布时间】:2021-05-01 02:58:45
【问题描述】:

我有在 HDFS 上以 Delta 形式写入的数据。据我了解,Delta 将数据存储为镶木地板,只是在其上添加了一个具有高级功能的附加层。

但是当使用 Pyspark 读取数据时,如果使用 spark.read.parquet()spark.read.format('delta').load() 读取数据帧,我会得到不同的结果

df = spark.read.format('delta').load("my_data")
df.count()
> 184511389

df = spark.read.parquet("my_data")
df.count()
> 369022778

如你所见,差别很大。

我对 delta vs parquet 有什么误解吗?

Pyspark 版本是2.4

【问题讨论】:

  • 不确定您将数据写入增量表的内容和方式,但您可能会看到由于旧版本数据导致的纯计数差异。我想你应该用format("delta")而不是parquet来阅读delta表是有原因的,否则使用delta表根本没有意义?

标签: apache-spark pyspark parquet delta-lake


【解决方案1】:

最可能的解释是您使用overwrite 选项两次写入Delta。但是 Delta 是版本化的数据格式 - 当您使用 overwrite 时,它不会删除以前的数据,它只是写入新文件,并且不会立即删除文件 - 它们只是在 Delta 使用的清单文件中标记为已删除。当你从 Delta 读取数据时,它知道哪些文件被删除了,哪些文件没有被删除,并且只读取实际数据。当您在 Delta Lake 上执行 VACUUM 时,会实际删除数据文件。

但是当您使用 Parquet 读取时,它没有关于已删除文件的信息,因此它会读取您在目录中的所有内容,因此您会获得两倍的行数。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 2021-12-03
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多