无法从 S3 存储桶(镶木地板文件)将数据加载到 EMR 上的猪中

Not able to load data into pig on EMR from S3 bucket (parquet file)

我想从 EMR 上的 Pig 中的 s3 存储桶中加载数据,我的源文件格式是 parquet:

下面我使用的命令:

A = LOAD 's3://test-1/icted/emp_db/emp_tb' 
USING parquet.pig.ParquetLoader(header__change_seq:chararray,header__change_oper:chararray,header__change_mask:chararray,header__stream_position:chararray,header__operation:chararray,header__transaction_id:chararray,header__timestamp:chararray,policylangaccessind_afi:chararray,loadcommandid:double,previousgroupid:double,enddate:chararray,assignedbyuserid:double,dstcd_afi:chararray);

我无法加载数据,出现以下错误:

      ERROR pig.PigServer: exception during parsing: Error during parsing. <file test.pig, line 20, column 2>  mismatched input 'header__change_seq' expecting RIGHT_PAREN

需要这方面的帮助。

失踪''

A = LOAD 's3://test-1/icted/emp_db/emp_tb' USING parquet.pig.ParquetLoader('header__change_seq:chararray,header__change_oper:chararray,header__change_mask:chararray,header__stream_position:chararray,header__operation:chararray,header__transaction_id:chararray,header__timestamp:chararray,policylangaccessind_afi:chararray,loadcommandid:double,previousgroupid:double,enddate:chararray,assignedbyuserid:double,dstcd_afi:chararray');

ParquetLoader

之后缺少 as
A = LOAD 's3://test-1/icted/emp_db/emp_tb' USING parquet.pig.ParquetLoader AS (header__change_seq:chararray,header__change_oper:chararray,header__change_mask:chararray,header__stream_position:chararray,header__operation:chararray,header__transaction_id:chararray,header__timestamp:chararray,policylangaccessind_afi:chararray,loadcommandid:double,previousgroupid:double,enddate:chararray,assignedbyuserid:double,dstcd_afi:chararray);

两件事:

您应该在 emr org.apache.parquet.pig.ParquetLoader() 上使用完整的 class 路径;不需要给它传递一个模式,parquet reader 会为你推断它。

确保您使用的 pig 代码版本与 parquet 文件的版本兼容(可以使用 parquet 工具查找所使用的 parquet 版本)

尽量使用最新版本https://mvnrepository.com/artifact/org.apache.parquet/parquet-pig-bundle/1.10.0

REGISTER parquet-pig-bundle-1.10.0.jar;