PySpark将IntegerTypes转换为ByteType以进行优化

dl8*_*dl8 6 python apache-spark pyspark spark-dataframe

我正在通过镶木地板文件将大量数据读入数据帧.我注意到大量的列要么具有1,0,-1作为值,因此可以从Int转换为字节类型以节省内存.

我写了一个函数来做这个并返回一个新的数据帧,其值为字节,但是当在UI中查看数据帧的内存时,我看到它只是保存为原始数据帧的转换而不是新的数据帧本身,因此占用相同的内存量.

我对Spark很新,可能还没有完全理解内部,所以我最初如何将这些列设置为ByteType?

hi-*_*zir 0

TL;DR它可能很有用,但实际上影响可能比您想象的要小得多。

正如您所注意到的:

UI 中数据帧的内存,我看到它只是保存为原始数据帧的转换,而不是作为新数据帧本身,因此占用相同的内存量。

对于存储,Spark 使用内存列式存储,它应用了许多优化,包括压缩。如果数据的基数较低,则可以使用行程编码或字典编码轻松压缩列,并且转换不会产生任何差异。