使用 spark 展平嵌套的 json 文档并加载到 Elasticsearch
Posted
技术标签:
【中文标题】使用 spark 展平嵌套的 json 文档并加载到 Elasticsearch【英文标题】:Flatten a nested json document using spark and load into Elasticsearch 【发布时间】:2017-04-28 14:08:03 【问题描述】:我对 Spark 和 java 编程比较陌生。给定一个包含嵌套对象的 json 文件,我需要展平其结构(对内容进行变性)并使用 spark 加载到 Elastisearch。
例如,
如果我的 example.json 的内容是:
"title": "Nest eggs",
"body": "Making your money work...",
"tags": [ "cash", "shares" ],
"comments":
"name": "John Smith",
"comment": "Great article",
"age": 28,
"stars": 4,
"date": "2014-09-01"
"owner":
"name": "John Smith",
"age": 28,
我想以下面的格式重建它并使用 spark 将其加载到 ES 中。
"title": "Nest eggs",
"body": "Making your money work...",
"tags": [ "cash", "shares" ],
"comments_name": "John Smith",
"comments_comment": "Great article",
"comments_age": 28
"comments_stars": 4,
"comments_date": "2014-09-01"
"owner_name": "John Smith",
"owner_age": 28,
如果嵌套对象之一为空,则内容也可以为空。
感谢任何帮助。谢谢
【问题讨论】:
在语义上,"comments.name"
(name
嵌套而不是comments
字段)和"comments_name"
(***字段)之间没有区别
同意。它可以是任何一种形式。在将其加载到 ES 中的索引之前,我希望它是一个扁平化的 json。
【参考方案1】:
您正在寻找的答案是here。
总而言之,您可以通过点符号选择所需的字段。
val df = sqlcontext.read.json(json)
val flattened = df.select($"title", $"comments.name")
【讨论】:
我认为他要求自动解决方案以上是关于使用 spark 展平嵌套的 json 文档并加载到 Elasticsearch的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 手动展平 Elasticsearch 嵌套的 JSON 文档?
如何使用 pyspark 在 aws 胶水中展平嵌套 json 中的数组?