我有一个数据帧包含〜40亿条记录。许多列是64位整数,但可以截断为32位或16位整数,而不会丢失数据。当我尝试使用下面的函数转换数据类型:是否值得将64位整数转换为火花数据帧中的32位(16位)整数?
def switchType(df, colName):
df = df.withColumn(colName + "SmallInt", df[colName].cast(ShortType()))
df = df.drop(colName)
return df.withColumnRenamed(colName + 'SmallInt', colName)
positionsDf = switchType(positionsDf, "FundId")
# repeat for 4 more cols...
print(positionsDf.cache().count())
这显示了以54.7 MB RAM中。当我不这样做时,它在RAM中显示为56.7MB。
那么,是否值得尝试截断整数?
我在独立模式下使用Spark 2.01。
不是Spark利用SSE和类似指令吗? –
Spark仅使用JVM可以提供的内容。在Java的情况下,改变数字类型并不能真正提高速度:http://stackoverflow.com/questions/2380696/java-short-integer-long-performance – Mariusz