当前位置: 首页 > news >正文

《Clojure数据分析秘笈》——2.8节大数据集的延迟处理

本节书摘来自华章社区《Clojure数据分析秘笈》一书中的第2章,第2.8节大数据集的延迟处理,作者(美)Eric Rochester,更多章节内容可以访问云栖社区“华章社区”公众号查看

2.8 大数据集的延迟处理
Clojure的一个卓越特性是它的大多数序列处理函数都是延迟处理的。这使得可以非常省力地处理大数据集。然而,当与从文件或其他输入设备读入的过程结合时,有很多需要注意的地方。
在本方法中,将介绍安全延迟读入CSV文件的几种方式。clojure.data.csv/read-csv默认就是延迟的,如何在正确时间关闭文件的同时保持这一特性呢?

2.8.1 准备工作
需要加载将在REPL中使用的库。使用以下命令完成:


423fde8b85ee5447f2ac0a61b9ece09e28ae171e

可以发现,当函数返回延迟序列时,还没有读入任何数据。但是当使用with-open形式退出时,文件自动关闭,发生了什么?
首先,文件被打开并传给read-csv函数,返回一个延迟序列。这个延迟序列被关闭文件的函数with-open返回。最后,REPL尝试将延迟序列输出到屏幕上。read-csv函数尝试从文件中读出数据。但在此时,文件已经关闭,因此抛出IOException。
这是编写函数时一个非常常见的问题。这个问题在我每次从数据库读数据时都会由于某些原因而出现。

  1. 为了修正这个问题,强制读入文件所有行:


0a93f292dee839082b4c35e6bab6d4784838056d

这个版本没问题。
2.8.3 实现原理
lazy-read-csv函数的最新版本起效是由于它读入csv/read-csv产生的延迟序列并将其装入另一个序列,当不再从CSV文件中读入时这个序列关闭输入文件。这个过程比较复杂是因为处理了两次层次的输入:读入文件和读入CSV。当上层的输入(读入CSV)完成时,将触发底层(读入文件)的操作。
然而,有了这个函数,又一次得到了一个简单好用的接口,将它提供给调用者并将其复杂的部分隐藏起来。
遗憾的是,这仍然有一个严重的问题:如果不打算读入整个文件,文件句柄不会关闭。在一些仅读入文件一部分的场景中,lazy-read-ok函数可能是最好的。

相关文章:

  • emacs学习中
  • 中国有望成超级计算机全球第一强国
  • Push的方式
  • 《Core Data应用开发实践指南》一2.6 单精度浮点数与双精度浮点数
  • ajax跨域原理
  • 红利窗口关闭?AI能否在安防开枝散叶
  • EntityFramework之领域驱动设计实践(六)(转)
  • Linux菜鸟级重点
  • LUN Mapping和ZONE在存储网络中的应用
  • Intel发布P4501数据中心超薄固态盘 3200MB/s、二代3D TLC
  • 深入分析 Java I/O 的工作机制
  • 微软延长Skylake平台支持Windows 7/8.1生命周期
  • vi 命令合集
  • 让小城市享受大城市的便利
  • linux下使用飞信机器人告警
  • 11111111
  • create-react-app做的留言板
  • Java IO学习笔记一
  • java8 Stream Pipelines 浅析
  • js中的正则表达式入门
  • Linux gpio口使用方法
  • Nacos系列:Nacos的Java SDK使用
  • passportjs 源码分析
  • Python进阶细节
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 从零搭建Koa2 Server
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 对象引论
  • 精彩代码 vue.js
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 如何利用MongoDB打造TOP榜小程序
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​Java并发新构件之Exchanger
  • ​Java基础复习笔记 第16章:网络编程
  • #mysql 8.0 踩坑日记
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (9)STL算法之逆转旋转
  • (Qt) 默认QtWidget应用包含什么?
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (实战篇)如何缓存数据
  • (一)80c52学习之旅-起始篇
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)c++ std::pair 与 std::make
  • ****三次握手和四次挥手
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET delegate 委托 、 Event 事件
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...