java - 如何使用 Pig 检查 JSON 中缺少的 key ?

标签 java json hadoop apache-pig elephantbird

我有一个具有不同架构的 JSON 文件。

{"asin":"xxxxxx", "title":"xxxsomething"}
{"asin":"yyyyy"}
{"asin":"zzzzzz", "title":"zzzsomething"}

为此我编写了一个使用 twitter's elephant-bird 的 pig 脚本加载 JSON 数据并将其转换为制表符分隔文件的库。

但是,如果输入 JSON 文件中的一行缺少“title”键(上例中的第 2 行),tvs 文件也没有任何内容代替它,例如:

xxxxxx  xxxsomething
yyyyyy  
zzzzzz  zzzsomething

如果缺少特定键,我想提供自定义默认值。我如何使用 PigLatin 执行此操作?

预期输出:

xxxxxx  xxxsomething
yyyyyy  default_string
zzzzzz  zzzsomething

这是我的脚本:

REGISTER elephant-bird-elephant-bird-4.13/pig/target/elephant-bird-pig-4.13.jar;
REGISTER elephant-bird-elephant-bird-4.13/hadoop-compat/target/elephant-bird-hadoop-compat-4.13.jar;
REGISTER elephant-bird-elephant-bird-4.13/core/target/elephant-bird-core-4.13-thrift9.jar;

reviews = load '../data/Amazon/meta_Amazon_Instant_Video.json'
          using com.twitter.elephantbird.pig.load.JsonLoader();

tabs = FOREACH reviews generate (chararray)$0#'asin' as asin_new, (chararray)$0#'title';

A = ORDER tabs BY asin_new;
DESCRIBE A;

STORE A INTO 'hdfs://localhost:9000/meta_Amazon_Instant_Video.tsv';

最佳答案

您可以简单地为此编写一个 UDF,并设置条件,如果其中一个为空,则传递默认字符串。

关于java - 如何使用 Pig 检查 JSON 中缺少的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674206/

相关文章:

java - "sql like"apache 配置单元的替代品

python - Spark : pyspark crash for some datasets - ubuntu

java - 如何检测后退按钮点击 Action

java - 当循环中条件发生变化时仅执行一次代码行

java - 如何防止 JSON 文件中出现负值 (java)

php - Laravel 中的 mariaDB JSON 支持

java - 如何使用日历生成开始和结束时间?

java - @JsonProperty 没有申请 BeanWrapper

java - 使用 Jackson 解析非同质 JSON 对象数组

hadoop - 在本地模式下限制Spark作业