Hadoop pig进阶语法

2019-03-28 13:10|来源: 网络

。Pig Latin是一种数据流语言,变量的命名规则同java中变量的命名规则,变量名可以复用(不建议这样做,这种情况下相当与新建一个变量,同时删除原来的变量)

A = load 'NYSE_dividends' (exchange, symbol, date, dividends);
A = filter A by dividends > 0;
A = foreach A generate UPPER(symbol);

。注释:--单行注释;/*……*/多行注释;

。Pig Latin关键词不区分大小写,比如load,foreach,但是变量名和udf区分大小写,COUNT是udf,所以不同于count。

。Load 加载数据

默认加载当前用户的home目录(/users/yourlogin),可以在grunt下输入cd 命令更改当前所在目录。

divs = load '/data/examples/NYSE_dividends'

也可以输入完整的文件名

divs = load ‘hdfs://nn.acme.com/data/examples/NYSE_dividends’

默认使用TAB(\t)作为分割符,也可以使用using定义其它的分割符

divs = load 'NYSE_dividends' using PigStorage(',');

注意:只能用一个字符作为分割符

还可以使用using定义其它的加载函数

divs = load 'NYSE_dividends' using HBaseStorage();

as用于定义模式

divs = load 'NYSE_dividends' as (exchange, symbol, date, dividends);

也可以使用通配符加载一个目录下的所有文件,该目录下的所有子目录的文件也会被加载。通配符由Hadoop文件系统决定,下面是hadoop 0.20所支持的通配符

glob comment
? Matches any single character.
* Matches zero or more characters.
[abc] Matches a single character from character set (a,b,c).
[a-z] Matches a single character from the character range (a..z), inclusive. The first character must be lexicographically less than or equal to the second character.
[^abc] Matches a single character that is not in the character set (a, b, c). The ^ character must occur immediately to the right of the opening bracket.
[^a-z] Matches a single character that is not from the character range (a..z) inclusive. The ^ character must occur immediately to the right of the opening bracket.
\c Removes (escapes) any special meaning of character c.
{ab,cd} Matches a string from the string set {ab, cd}

。as 定义模式,可用于load ** [as (ColumnName[:type])],foreach…generate ColumnName [as newColumnName]

。store存储数据,默认用using PigStorage 使用tab作为分割符。

store processed into '/data/examples/processed';

也可以输入完整路径比如hdfs://nn.acme.com/data/examples/processed.

可以使用using调用其它存储函数或其它分割符

store processed into 'processed' using
      HBaseStorage();
store processed into 'processed' using PigStorage(',');

注意:数据存储并不是存储为一个文件,而是由reduce进程数决定的多个part文件。

相关问答

更多
  • 所以......我尝试使用mapreduce选项运行Pig脚本: pig -x mapreduce script.pig 它仍然失败,但它至少产生了一个有意义的错误。 我似乎不得不从CSV文件中删除标题,因为Pig使用标题行作为数据。 这似乎只有在使用浮点数时才会发生 - 如果使用带整数的相同脚本,则只会忽略标题行。 就是这样。 首先从文件中删除标题,而不是对它运行脚本 - 它工作。 So ... I tried running Pig script with mapreduce option: pig ...
  • MapReduce只是一个计算框架 。 HBase与此无关。 也就是说,您可以通过编写MapReduce作业来有效地将数据提取到/从HBase中获取。 或者,您可以使用其他HBase API(如Java)编写顺序程序来放置或获取数据。 但是我们使用Hadoop,HBase等来处理大量的数据,所以没有什么意义。 当您的数据太大时,使用正常的顺序程序将非常低效。 回到你问题的第一部分,Hadoop基本上是两件事:一个分布式文件系统(HDFS) +一个计算或处理框架(MapReduce) 。 像所有其他FS一样, ...
  • 您的文件已复制到HDFS,文件名为: /home/hduser 。 您列出的ls输出显示文件大小约为10MB。 现在我假设你要找的是文件存在于文件夹/home/hduser 。 我还猜测在运行-copyFromLocal命令之前该文件夹不存在 - 在这种情况下,hadoop将复制到指定的文件。 如果指定的文件是目录,则hadoop将复制到该目录中的文件(该文件与本地副本具有相同的名称)。 因此,要解决此问题,您需要在执行-copyFromLocal fs命令之前确保该文件夹存在: # Delete the ...
  • 当我意识到我的硬盘已经满90%时,我解除了这种情况。 在这个级别,hadoop拒绝再写日志。 我只需删除一些(大!)文件,让它再次运行... I unblocked the situation while getting aware that my hard drive was 90% full. At this level, hadoop refuses to write anymore logs. I just had to delete some (big !) files to get it run ...
  • 要启动它,请转到hadoop的sbin目录,然后键入命令 mr-jobhistory-server.sh start historyserver --config $HADOOP_CONF_DIR $HADOOP_CONF_DIR是hadoop的配置文件(如hdfs-site.xml等)驻留的目录。 To start it,go to hadoop's sbin dir and then type the command mr-jobhistory-server.sh start historyserve ...
  • Hive中的记录处理不当 要筛选配置单元中的错误记录,可以在查询中启用跳过模式。 跳过模式的Hive配置是: SET mapred.skip.mode.enabled = true; 您需要在hive查询之前设置上面的命令。 您还可以通过提供以下参数来限制配置: SET mapred.map.max.attempts = 100; SET mapred.reduce.max.attempts = 100; SET mapred.skip.map.max.skip.records = 30000; SET ...
  • 在测试时,Hadoop只是可选的。 为了做任何规模的任何事情你也需要hadoop。 没有hadoop运行意味着你在本地模式下运行猪。 这基本上意味着所有数据都由您运行的同一个进程处理。这适用于单个节点和示例数据。 当运行任何大量数据或多台机器时,您希望以hadoop模式运行pig。 通过在cassandra节点上运行hadoop任务跟踪器,pig可以利用map reduce减少提供的优势,分配工作负载并使用数据局部性来减少网络传输。 Hadoop is only optional when you are ...
  • 猪可以以两种模式运行: 本地模式。 在这种模式下,根本不使用Hadoop集群。 所有进程都在单个JVM中运行,文件从本地文件系统中读取。 要以本地模式运行Pig,请使用以下命令: pig -x local MapReduce模式。 在此模式下,Pig将脚本转换为MapReduce作业并在Hadoop集群上运行它们。 这是默认模式。 群集可以是本地的或远程的。 Pig使用HADOOP_MAPRED_HOME环境变量在本地计算机上查找Hadoop安装(请参阅安装Pig )。 如果要连接到远程集群,则应在pi ...
  • 亚历克斯! 不幸的是,它与Pig路径(在我配置的hadoop集群上尝试过)无关,结果相同。 您得到的错误是指物理计划编译器在编译方法中存在错误。 因此,为了使您的尝试工作,您有两种可能性 使用hadoop运行本机MR作业,并在完成处理后将结果发送到pig 编辑pig源代码并编译自己的版本。 你需要编辑org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MRCompiler#compile方法并替换 for (PhysicalOperato ...
  • MapReduce的作用可以称为“执行引擎”。 Pig作为一个系统正在将Pig Latin命令转换为一个或多个MR Jobs。 Pig本身没有能力运行它 - 它将这项工作委托给Hadoop。 我会在编译器和操作系统之间建立类比。 OS执行时编译器创建程序。 在这个比喻中,Pig是编译器,Hadoop是OS。 猪做的更多 - 它运行作业,监视它们等等。所以除了编译器之外,它可以被视为“shell”。 在我的理解中,从以下角度看,Pig不是100%编译器 - 它不会根据命令编译MR作业。 它传递有关应该对已存在 ...