应为begin\u对象,但在配置单元中为字符串错误

lsmepo6l  于 2021-05-27  发布在  Hadoop
关注(0)|答案(0)|浏览(229)

我正在尝试使用aws数据管道将一些jsonl文件从s3导出到dynamodb。我们正在使用配置单元脚本来执行此操作。
数据本身如下: {"property":{"type":"retail","code":"A"},"comments":{"country":"UK","city":"Bristol"},"id":"7659403"} 我的配置单元脚本如下:

  1. ADD JAR s3://bucket/json-serde-1.3.8-jar-with-dependencies.jar;
  2. DROP TABLE IF EXISTS json_export_ddb;
  3. CREATE EXTERNAL TABLE json_export_ddb (
  4. property map<string,string>,
  5. comments map<string,string>,
  6. id string)
  7. ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
  8. WITH SERDEPROPERTIES ( 'paths'='property, comments, id' )
  9. STORED AS TEXTFILE
  10. LOCATION 's3:/bucket/subdirectory';
  11. DROP TABLE IF EXISTS json_hive;
  12. CREATE EXTERNAL TABLE json_hive (
  13. property map<string,string>,
  14. comments map<string,string>,
  15. id string)
  16. STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
  17. TBLPROPERTIES (
  18. "dynamodb.table.name" = "dynamoTableName",
  19. "dynamodb.column.mapping" = "property:property,comments:comments,id:id");
  20. INSERT OVERWRITE TABLE json_hive SELECT * FROM json_export_ddb;

如果数据类型是primitive(string、double等),那么这个脚本执行得很好。但在本例中,有两个Map,我在执行同一个脚本时遇到了问题。
我得到的错误是:

  1. Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"property":{"type":"retail","code":"A"},"comments":{"country":"UK","city":"London"},"id":"7659403"}
  2. Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1

我一整天都在犯这个错误,仍然不知道自己做错了什么。错误本身很明显,它需要一个json对象,但得到的却是一个字符串。那东西,绳子在哪里?json似乎以 { (如错误日志中所示)。
我看了其他类似的帖子,但他们直接使用gson,而在这个例子中,它是一个外部服务导入gson,所以我不知道我要做什么。
谢谢您。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题