Apache Pig是一个用于处理大数据的平台,它提供了一个名为Pig Latin的高级语言,用于编写MapReduce程序。本文将通过一个简单的实际例子,介绍如何使用Pig Latin进行数据处理。
Pig作为一个客户端服务器模式运行的解释器,它将简单的代码转换为复杂的MapReduce操作,这些操作由Hadoop分布式网络处理。以下是在不同操作系统上安装Pig的步骤:
# 在Red Hat兼容系统上安装Pig:
$ sudo yum install pig
# 在SLES系统上安装Pig:
$ sudo zypper install pig
# 在Ubuntu和其他Debian系统上安装Pig:
$ sudo apt-get install pig
如果打算在Windows上运行Pig,建议使用VMWare Player或Oracle VirtualBox在Linux虚拟机上操作。安装Pig包后,可以开始使用grunt shell。
# 启动Grunt Shell (MRv1):
$ export PIG_CONF_DIR=/usr/lib/pig/conf
$ export PIG_CLASSPATH=/usr/lib/hbase/hbase-0.94.2-cdh4.2.1-security.jar:/usr/lib/
zookeeper/zookeeper-3.4.5-cdh4.2.1.jar
$ pig
# 启动Grunt Shell (YARN):
$ export PIG_CONF_DIR=/usr/lib/pig/conf
$ export PIG_CLASSPATH=/usr/lib/hbase/hbase-0.94.2-cdh4.2.1-security.jar:/usr/lib/zookeeper/zookeeper-3.4.5-cdh4.2.1.jar
$ pig
一旦看到“grunt>”提示符,就可以开始在Pig上编写代码了。
假设是名为XYZ的零售店的分析主管。XYZ维护了所有在该店购物的顾客记录。本次练习的任务是在销售数据中创建一个名为“税”的新列,该列是销售额的5%,然后筛选出税额低于35美元的顾客。完成这个子集后,选择顾客编号最小的前两位顾客。以下是零售店的样本表格,保存为.csv格式。
将逐步构建这个查询。以下是需要遵循的步骤:
步骤1:加载数据集到Pig可理解的格式,并创建临时存储,以便Pig查询可以直接引用表格。
Sales = LOAD 'dataset.csv' USING PigStorage (',') AS (Customer,Sales);
注意上述命令没有加载变量“年龄”。在处理大数据时,需要非常明确需要使用的变量,因此确保在代码中只选择那些对重要的变量。
步骤2:创建一个包含税值的新表格。
Tax = FOREACH Sales GENERATE Customer,Sales,Sales*0.05 as Tax : float;
上述命令生成了一个新的名为“税”的表格,包含所有三个列。现在表格看起来如下:
步骤3:根据税值低于35美元的条件,对整个表格进行子集筛选。
Lowtax = FILTER Tax BY Tax < 35;
此命令的输出将选择下表中的黄色单元格:
步骤4:现在需要对子集表格按顾客(ID)排序,并选择前两位顾客。
sortedcust = ORDER Lowtax BY Customer;
top_two = LIMIT sortedcust 2;
步骤5:将临时文件存储到永久的csv文件中。
STORE sortedcust INTO 'salesreport' USING PigStorage (',');
Sales = LOAD 'dataset.csv' USING PigStorage (',') AS (Customer,Sales);
Tax = FOREACH Sales GENERATE Customer,Sales,Sales*0.05 as Tax : float;
Lowtax = FILTER Tax BY Tax < 35;
sortedcust = ORDER Lowtax BY Customer;
top_two = LIMIT sortedcust 2;
STORE sortedcust INTO 'salesreport' USING PigStorage (',');