我有一個數據幀包含〜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