Spark csv 文件大小比 pandas 大 2 倍
Spark csv file size 2x bigger than with pandas
当我使用 pyspark 将数据保存到单个 csv 文件时,我得到的文件大小比使用 .toPandas()
转换它然后使用 to_csv()
.[=13 保存它后大 2 倍=]
有什么想法会导致如此大的差异吗?
有几个因素会影响大小差异。
- emptyValue:默认情况下,Spark 的
df.write.csv
将用环绕双引号保存空值。对于 Spark write
,这会为每个空值增加 2 个字符。要禁用双引号换行,请使用 .csv(path, emptyValue='')
# Spark write.csv
some value,"",""
# Pandas.to_csv
some value,,
- Panda 的数据类型隐式转换。:当您在 Spark 中有可为空的整数值时,Pandas 会将整数转换为浮点数,因为 Pandas 整数不是可为空。这将减少 Spark
write
. 的一些字符
# Spark write.csv
some value,1000,
some value,,
# Pandas .to_csv
some value,1000.0,
some value,,
其他小事可能是 Spark 默认情况下不会写 header 而 Pandas 会写。或者 Pandas 将默认写入 index
值,而 Spark 没有 index
.
我认为还有更多因素会影响两个平台存储数据的方式。为了观察差异,我会保存部分数据并尝试查看纯文本文件以查看差异。
当我使用 pyspark 将数据保存到单个 csv 文件时,我得到的文件大小比使用 .toPandas()
转换它然后使用 to_csv()
.[=13 保存它后大 2 倍=]
有什么想法会导致如此大的差异吗?
有几个因素会影响大小差异。
- emptyValue:默认情况下,Spark 的
df.write.csv
将用环绕双引号保存空值。对于 Sparkwrite
,这会为每个空值增加 2 个字符。要禁用双引号换行,请使用.csv(path, emptyValue='')
# Spark write.csv
some value,"",""
# Pandas.to_csv
some value,,
- Panda 的数据类型隐式转换。:当您在 Spark 中有可为空的整数值时,Pandas 会将整数转换为浮点数,因为 Pandas 整数不是可为空。这将减少 Spark
write
. 的一些字符
# Spark write.csv
some value,1000,
some value,,
# Pandas .to_csv
some value,1000.0,
some value,,
其他小事可能是 Spark 默认情况下不会写 header 而 Pandas 会写。或者 Pandas 将默认写入 index
值,而 Spark 没有 index
.
我认为还有更多因素会影响两个平台存储数据的方式。为了观察差异,我会保存部分数据并尝试查看纯文本文件以查看差异。