Spark csv 文件大小比 pandas 大 2 倍

Spark csv file size 2x bigger than with pandas

当我使用 pyspark 将数据保存到单个 csv 文件时,我得到的文件大小比使用 .toPandas() 转换它然后使用 to_csv().[=13 保存它后大 2 倍=]

有什么想法会导致如此大的差异吗?

有几个因素会影响大小差异。

  1. emptyValue:默认情况下,Spark 的df.write.csv 将用环绕双引号保存空值。对于 Spark write,这会为每个空值增加 2 个字符。要禁用双引号换行,请使用 .csv(path, emptyValue='')
# Spark write.csv

some value,"",""

# Pandas.to_csv

some value,,
  1. Panda 的数据类型隐式转换。:当您在 Spark 中有可为空的整数值时,Pandas 会将整数转换为浮点数,因为 Pandas 整数不是可为空。这将减少 Spark write.
  2. 的一些字符
# Spark write.csv

some value,1000,
some value,,

# Pandas .to_csv

some value,1000.0,
some value,,

其他小事可能是 Spark 默认情况下不会写 header 而 Pandas 会写。或者 Pandas 将默认写入 index 值,而 Spark 没有 index.

我认为还有更多因素会影响两个平台存储数据的方式。为了观察差异,我会保存部分数据并尝试查看纯文本文件以查看差异。