Spark的性能,想要它快,就得充分利用好系统资源,尤其是内存和CPU:核心思想就是能用内存cache就别spill落磁盘,CPU 能并行就别串行,数据能local就别shuffle。 ----xrzs
开发调优
要减少shuffle的开销,主要有两个思路,
- 减少shuffle次数,尽量不改变key,把数据处理在local完成
- 减少shuffle的数据规模
Type | RDD | DataFrame | DataSet |
definition | RDD是分布式的Java对象的集合 | DataFrame是分布式的Row对象的集合 | DataSet是分布式的Java对象的集合 ds = df.as[ElementType] df = Dataset[Row] |
pros | * 编译时类型安全 * 面向对象的编程风格 | * 引入schema结构信息 * 减少数据读取,优化执行计划,如filter下推,剪裁 * off-heap堆外存储 | * Encoder序列化 * 支持结构与非结构化数据 * 和rdd一样,支持自定义对象存储 * 和dataframe一样,支持结构化数据的sql查询 * 采用堆外内存存储,gc友好 * 类型转化安全,代码有好 |
cons | * 对于结构化数据不友好 * 默认采用的是java序列化方式,序列化结果比较大,而且数据存储在java堆内存中,导致gc比较频繁 | * rdd内部数据直接以java对象存储,dataframe内存存储的是Row对象而不能是自定义对象 * 编译时不能类型转化安全检查,运行时才能确定是否有问题 | * 可能需要额外定义Encode |
欢迎光临 168大数据 (http://www.bi168.cn/) | Powered by Discuz! X3.2 |