无法从 S3 存储桶(镶木地板文件)将数据加载到 EMR 上的猪中
Posted
技术标签:
【中文标题】无法从 S3 存储桶(镶木地板文件)将数据加载到 EMR 上的猪中【英文标题】:Not able to load data into pig on EMR from S3 bucket (parquet file) 【发布时间】:2018-11-13 17:26:56 【问题描述】:我想在 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
在这方面需要帮助。
【问题讨论】:
【参考方案1】:几件事:
您应该在 emr org.apache.parquet.pig.ParquetLoader()
上使用完整的类路径;无需传递模式,拼花阅读器会为您推断。
确保您使用的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;
【讨论】:
【参考方案2】:缺少''
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);
【讨论】:
感谢您的回复,我在第一个选项中遇到错误,errorMessage=java.lang.IllegalArgumentException:架构大小不匹配:消息 spark_schema optional binary header__change_seq (UTF8);可选二进制标头__change_oper (UTF8);可选二进制标头__change_mask (UTF8);可选二进制标头__stream_position (UTF8);可选的二进制标头__操作(UTF8);可选的二进制标头__transaction_id (UTF8);可选的 int96 header__timestamp; 对于第二个选项---->7153 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: can't convert optional int96 header__timestamp 我对 EMR 很陌生,但您的回复对我有很大帮助。以上是关于无法从 S3 存储桶(镶木地板文件)将数据加载到 EMR 上的猪中的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyspark 将镶木地板文件(在 aws s3 中)存储到 spark 数据框中
使用 pyspark 从 s3 位置读取镶木地板文件的文件夹到 pyspark 数据帧