Spark:数据帧序列化

use*_*243 5 serialization scala kryo apache-spark spark-dataframe

我有 2 个关于 Spark 序列化的问题,我无法通过谷歌搜索找到答案。

  1. 如何打印出当前使用的序列化程序的名称;我想知道 spark.serializer 是 Java 还是 Kryo。
  2. 我有以下应该使用 Kryo 序列化的代码;用于数据帧的内存大小变为 21meg,这是我在没有序列化的情况下缓存时的四分之一;但是当我删除 Kryo 配置时,大小仍然是 21meg。这是否意味着 Kryo 从未被使用过?是不是因为数据帧中的记录只是行,所以 Java 和 Kryo 序列化的大小相同?

    val conf = new SparkConf()    
    conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")    
    conf.set("spark.kryo.registrationRequired", "false")    
    val spark = SparkSession.builder.master("local[*]").config(conf)
           .appName("KryoWithRegistrationNOTRequired").getOrCreate    
    val df = spark.read.csv("09-MajesticMillion.csv")    
    df.persist(StorageLevel.MEMORY_ONLY_SER)
    
    Run Code Online (Sandbox Code Playgroud)

小智 4

这是否意味着 Kryo 从一开始就没有被使用过?

正是这个意思。Spark SQL(Dataset)使用它自己的列式存储来进行缓存。未使用 Java 或 Kryo 序列化,因此spark.serializer完全没有影响。

  • 感谢您的回答; 您能给我推荐一些解释这一点的来源或文档吗? (6认同)