A => Option[B] => B 这个过程
scala的 aList.map(B(_)).filter(!_.isEmpty).map(_.get) 和 aList.flatMap(B(_)) 有什么差别? 在 spark rdd 以及 sparksql 同样的操作又有什么异同呢?
scala的 aList.map(B(_)).filter(!_.isEmpty).map(_.get) 和 aList.flatMap(B(_)) 有什么差别? 在 spark rdd 以及 sparksql 同样的操作又有什么异同呢?
--
- Scala
对Option而言,逻辑上flatMap就是map.filter.map的简写。
def flatMap[B](f: A => GenTraversableOnce[B]): Iterator[B] = new AbstractIterator[B] { private var cur: Iterator[B] = empty private def nextCur() { cur = f(self.next()).toIterator } def hasNext: Boolean = { // Equivalent to cur.hasNext || self.hasNext && { nextCur(); hasNext } // but slightly shorter bytecode (better JVM inlining!) while (!cur.hasNext) { if (!self.hasNext) return false nextCur() } true } def next(): B = (if (hasNext) cur else empty).next() }
def filter(p: A => Boolean): Iterator[A] = new AbstractIterator[A] { // TODO 2.12 - Make a full-fledged FilterImpl that will reverse sense of p private var hd: A = _ private var hdDefined: Boolean = false def hasNext: Boolean = hdDefined || { do { if (!self.hasNext) return false hd = self.next() } while (!p(hd)) hdDefined = true true } def next() = if (hasNext) { hdDefined = false; hd } else empty.next() }
def map[B](f: A => B): Iterator[B] = new AbstractIterator[B] { def hasNext = self.hasNext def next() = f(self.next()) }
- Spark RDD
和scala的类似,本身RDD的flatMap、map、filter的compute方法都是调用Scala集合类的对应方法。
- SparkSQL
用explain查看执行计划,不理解的话打断点(打日志)查看生成的java类。
- http://www.winseliu.com/blog/2016/10/12/sparksql-view-and-debug-generatecode/
- https://www.zhihu.com/question/51544925
相关推荐
Spark提供了更丰富的API,包括Map、Reduce、Filter等,同时还支持DataFrame和Spark SQL,方便进行结构化数据处理。Spark的核心组件包括Spark Core、Spark SQL、Spark Streaming和MLlib,涵盖了批处理、交互式查询、...
Hadoop与Spark的异同** - 相同点:都基于分布式计算框架。 - 不同点:Hadoop侧重批处理,Spark支持多种计算模式。 **5. RDD持久化原理** - RDD可以被缓存在内存或磁盘上。 - 通过`persist()`或`cache()`方法指定...
4. **Hive和HBase**:Hive作为数据仓库在大数据分析中的应用,HQL(Hive Query Language)与SQL的异同;HBase作为NoSQL数据库的特性,如列族、行键、时间戳等。 5. **数据清洗与预处理**:数据质量的重要性,缺失值...
例如,`map`和`filter`函数,它们接受一个函数和一个列表,分别对列表中的每个元素应用该函数,然后返回一个新的列表。 3. **数据不可变性**:在函数式编程中,数据一旦创建就不可更改,这样可以避免并发问题,并...
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip