Java 我是否必须显式地使用Dataframe的方法来利用Dataset的优化?
为了利用数据集的优化,我是否必须明确使用数据帧的方法,例如df.selectcolname、colage等,或者调用任何数据集的方法?即使是类似RDD的方法,例如filter、map等,也可以进行优化?数据帧优化通常有三种风格: 钨存储器管理 Catalyst查询优化 批发代码 钨存储器管理 在定义RDD[myclass]时,spark并不真正理解myclass是什么。这意味着,通常每一行将包含该类的一个实例 这有两个问题 第一个是对象的大小。java对象有开销。例如,包含两个简单整数的case类。执行1000000个实例的序列并将其转换为RDD需要约26MB,而对dataset/dataframe执行相同操作需要约2MB 此外,在dataset/dataframe中执行此操作时,该内存不是由垃圾收集管理的,而是由spark在内部作为不安全内存管理的,因此在GC性能方面的开销较小 Dataset与dataframe具有相同的内存管理优势。也就是说,在执行数据集操作时,将数据从内部行数据结构转换为case类会带来性能开销 Catalyst查询优化 使用dataframes函数时,spark知道您要做什么,有时可以将查询修改为更有效的等效查询 例如,假设您正在执行以下操作: df.带列a,lit1.过滤器$b<$a+1 基本上你是在检查x<1+1。Spark足够聪明,可以理解这一点并将其更改为xJava 我是否必须显式地使用Dataframe的方法来利用Dataset的优化?,java,apache-spark,apache-spark-sql,apache-spark-dataset,Java,Apache Spark,Apache Spark Sql,Apache Spark Dataset,为了利用数据集的优化,我是否必须明确使用数据帧的方法,例如df.selectcolname、colage等,或者调用任何数据集的方法?即使是类似RDD的方法,例如filter、map等,也可以进行优化?数据帧优化通常有三种风格: 钨存储器管理 Catalyst查询优化 批发代码 钨存储器管理 在定义RDD[myclass]时,spark并不真正理解myclass是什么。这意味着,通常每一行将包含该类的一个实例 这有两个问题 第一个是对象的大小。java对象有开销。例如,包含两个简单整数的case