Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否必须显式地使用Dataframe的方法来利用Dataset的优化?_Java_Apache Spark_Apache Spark Sql_Apache Spark Dataset - Fatal编程技术网

Java 我是否必须显式地使用Dataframe的方法来利用Dataset的优化?

Java 我是否必须显式地使用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

为了利用数据集的优化,我是否必须明确使用数据帧的方法,例如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足够聪明,可以理解这一点并将其更改为x