首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 JAQL 语言读写大数据文件(1)

使用 JAQL 语言读写大数据文件(1)

简介JAQL 是 Query Language for JSON 的简称,是 InfoSphere BigInsights 的主要组件之一。作为一种 high-level 的查询语言,它主要帮助用户使用和操纵“大数据”。它可以执行各种类型的数据分析,无论是需求分析,探索性分析或是实际的生产环境中,它都是一个自动化能力强大,并提供多种控制和丰富功能的脚本语言。
对于初学者来说,第一步是将各种不同格式的文本正确的读入,才能进行下一步的分析操作。而由于 JAQL 语言的灵活性,初学者很难正确的选择合适的适配函数来读取不同格式的文本。
本文列举了各种不同格式的 JSON 文本,以及读写范例,从而帮助初学者快速掌握 JAQL 语言的 I/O,为进一步的分析打下基础。
JAQL 脚本的读写函数JAQL 作为一个灵活的大数据处理脚本,可以很方便的处理各类数据存储格式。JAQL 可以处理的文件格式主要分为文本文件和二进制文件。其提供两类函数来进行这两种文件的读写,一类是用于读写的函数,一类是文件描述函数。
读写函数JAQL 脚本共有 5 个读写函数,分别是 jaqlGet() 函数、read() 函数、write() 函数、localRead() 函数和 localWrite() 函数:
  • jaqlGet() 函数:该函数只能读取单条 JAQL 记录的文档,它并不会使用 Hadoop 的 I/O 功能,也就是说,该函数并不支持分布式文件系统,也不会被解析为一个 map-reduce job,因此,它只支持本地文件系统和 HTTP 请求。jaqlGet() 函数的输入为一条 URI 记录。例如,当文件在本地文件系统中,并且只有一条 JAQL 记录,就可以使用 jaqlGet() 函数来读取。
  • read() 函数: read() 函数是使用最为广泛的读函数,任何 JAQL 支持的文件,都可以使用 read() 函数来读取。read() 函数支持 map-reduce job,并且以文件描述函数作为输入参数,因此,read() 函数可以支持各种格式的输入文件,有更大的灵活性。
  • write() 函数:write() 函数用于将 JSON 格式的数据流写入到文件系统中。输入参数为文件描述函数,并且根据选择的文件描述函数不同,可以输出成不同格式的文件。
  • localRead() 函数:localRead() 函数与 read() 函数类似,唯一不同的是,localRead() 函数并不会使用 map-reduce 过程来读取文件。localRead() 函数同样可以读取本地文件系统的文件和分布式文件系统中的文件。
  • localWrite() 函数:localWrite() 函数与 write() 函数的关系,如同 localRead() 函数与 read() 函数的关系,不同的是,由于 write() 函数会调用 map-reduce 过程,它的最终结果可能会被写在一个目录下,而 localWrite() 函数的结果则会被写成一个文件。
文件描述函数文件描述函数主要用来描述输入文件的格式信息,可以将其理解为输入文件和读写文件之间的适配器,只有选择正确的适配器,读写函数才能正确的读取输入文件的内容。表格 1 中描述了常用的文件描述函数的名称,使用范围等信息。
表 1. 文件描述函数列表名称描述使用范围支持的文件类型del()用于读取以逗号(也可以是其他符号)为分隔符的文本文件当CSV文件中无空行、错行时,可以使用del()文件描述函数读取本地文件系统、分布式文件系统lines()用于读取以行为单位的文本文件读取以行为单位的文件,每一行可以是CSV文件,也可以是JSON格式的记录本地文件系统、分布式文件系统jaqltemp()用于JAQL临时文件,例如map-reduce的中间步骤该文件格式以JAQL模式存储数据,比一般的二进制格式更简洁,从而提高性能,节省磁盘空间。以jaqltemp()描述函数存储的文件,需要以它来读取本地文件系统、分布式文件系统seq()用于读取二进制格式的JSON文件当JSON格式的文件以二进制存储时,使用该描述函数读取本地文件系统、分布式文件系统jsonTextFile()用于从本地文件系统读写JSON格式的文本文件读写的文件内容必须是正确的JSON格式文件本地文件系统jsonText()可以读写本地文件系统或分布式文件系统的JSON格式文本文件读写的文件内容必须是正确的JSON格式文件本地文件系统、分布式文件系统http()用于读取http协议返回的JSON格式数据该函数的输入参数为URLURL
需要注意的是,JAQL 的二进制文件并不适合夸版本的应用,当需要在不同的 JAQL 版本中交叉使用时,需要将文件存储为文本格式。
当文件存储在本地文件系统时,我们通过给文件路径加前缀“file://”来标明,而当文件存储在分布式文件系统时,则加前缀“hdfs://”。
返回列表