**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
四年前关门了。
改进这个问题
我正在hortonworks虚拟机中运行一个pig脚本,目的是提取xml数据集的某些部分,并将这些部分加载到hcatalog表的列中。在本地机器上,我在xml文件上运行pig脚本,得到一个包含所有提取部分的输出文件。但是,由于某种原因,当我在hortonworks vm中运行同一个脚本时,该脚本似乎运行成功,但hcatalog表仍然为空。
以下是我的本地脚本:
REGISTER piggybank.jar
items = LOAD 'data1.xml' USING org.apache.pig.piggybank.storage.XMLLoader('row') AS (row:chararray);
data = FOREACH items GENERATE
REGEX_EXTRACT(row, 'Id="([^"]*)"', 1) AS id:int,
REGEX_EXTRACT(row, 'CreationDate="([^"]*)"', 1) AS creationdate:chararray,
REGEX_EXTRACT(row, 'Score="([^"]*)"', 1) AS score:int,
REGEX_EXTRACT(row, 'Title="([^"]*)"', 1) AS title:chararray;
STORE data INTO '/tmp/postsETLResults' USING PigStorage();
我在hortonworks里用的是:
REGISTER piggybank.jar
items = LOAD 'data1.xml' USING org.apache.pig.piggybank.storage.XMLLoader('row') AS (row:chararray);
data = FOREACH items GENERATE
REGEX_EXTRACT(row, 'Id="([^"]*)"', 1) AS id:int,
REGEX_EXTRACT(row, 'CreationDate="([^"]*)"', 1) AS creationdate:chararray,
REGEX_EXTRACT(row, 'Score="([^"]*)"', 1) AS score:int,
REGEX_EXTRACT(row, 'Title="([^"]*)"', 1) AS title:chararray;
STORE data into 'posts_table_1' USING org.apache.hcatalog.pig.HCatStorer();
validate = LOAD 'default.posts_table_1' USING org.apache.hcatalog.pig.HCatLoader();
示例xml行(来自stackoverflow公共数据集):
<row Id="149115" PostTypeId="2" ParentId="149078" CreationDate="2008-09-29T15:16:23.870" Score="1" Body="<p>I'm sure you can also have Oracle display a query plan so you can see exactly which index is used first.</p>
" OwnerDisplayName="user16324" LastActivityDate="2008-09-29T15:16:23.870" CommentCount="1" />
我手动创建了hcatalog表,所有正确的字段都存在并且类型正确。
奇怪的是如果我这么做了 dump data
在Pig,我没有得到任何产出。如果我 illustrate data
我在日志中看到我的数据片段,接着是大的空白区域,接着是更多的数据,等等。
我错过了什么?我真的很想用这个凌乱的xml文件在hcatalog中得到一个整洁的表。同样,当在我的机器上运行本地脚本时,我得到了我想要的结果,但是当我运行第二个版本时,它是为将输出存储到 posts_table_1
hcatalog表,我得到一个成功消息,但是一个空表。
或者,如果我可以在本地计算机上以逗号分隔的文件形式获取输出,我可以使用该文件,并让hcatalog自动在接口中加载数据。到目前为止,输出是以空格分隔的,这在色调上是有问题的,因为帖子的标题包含空格。
提前谢谢!这把我难住了。
1条答案
按热度按时间55ooxyrt1#
我发现了问题。我手动创建了hcatalog表,并使用了所有默认选项,包括设置为
^A (/100)
. 我的输出有用制表符分隔的列(\t
),因此当表接收到数据时,它没有发现^A
分隔符并存储空数据集。我重新设计了table\t
一切都很顺利。