Hive在单个文件中拆分两个用逗号分隔的相同Jsons

时间:2017-06-27 01:42:21

标签: json regex apache-spark hive hiveql

我有两个Jsons,如下所示。我们的生产系统将多个Jsons聚合成单个文件,如下所示。我的问题是如何拆分单个用逗号分隔的jsons(i,e 1& 2)并从文件中删除3。 1,2和3之间的差异是3没有条件ID

 1---{name:string,
        actid: string,
        data:array<struct>,
        conditionId:string
     },
 2---{name:string,
        actid: string,
        data:array<struct>,
        conditionId:string
     },
 3---{name:string,
        actid:string,
       data:array<struct>
     }

1 个答案:

答案 0 :(得分:1)

如果您有一个包含数据的文本文件

1--- {name:string, actid: string, data:array, conditionId:string }, 2---{name:string, actid: string, data:array, conditionId:string}, 3---{name:string, actid:string, data:array}

如果您希望filter格式错误的json为3并将该文件另存为有效的json文件,那么您可以在spark中使用以下代码

val data = sc.textFile("path to the malformed input file")
data.flatMap(line => line.split("---"))
  .map(array => array.split(","))
  .filter(_.length > 3)
  .map(array => conditions(array(0).split(":")(1), array(1).split(":")(1), array(2).split(":")(1), array(3).split(":")(1).replace("}", "")))
  .toDF()
  .write.json("path to output json file")

你应该有一个有效的json文件为

{"name":"string","actid":" string","data":"array","conditionId":"string "}
{"name":"string","actid":" string","data":"array","conditionId":"string"}