当前位置: 首页 > 知识库问答 >
问题:

在Spark中创建分层JSON

伏欣悦
2023-03-14

我有一个火花数据框,我需要写入MongoDB。我想知道如何在mongoDB中将数据框的一些列写成嵌套/分层JSON。假设数据框有6列,col1,col2,…… col5,col6我想要col1,col2,col3作为第一层次结构,其余列col4到col6作为第二层次结构。像这样的东西,

{
    "col1": 123,
    "col2": "abc",
    "col3": 45,
    "fields": {
        "col4": "ert",
        "col5": 45,
        "col6": 56
    }
}

我如何在pyspark中实现这一点?

共有1个答案

东方玉泽
2023-03-14

对于这种情况,请在内置函数中使用< code>to_json struct。

示例:

df.show()                                                                                                         
#+----+----+----+----+----+----+
#|col1|col2|col3|col4|col5|col6|
#+----+----+----+----+----+----+
#| 123| abc|  45| ert|  45|  56|
#+----+----+----+----+----+----+

from pyspark.sql.functions import *
df.withColumn("jsn",to_json(struct("col1","col2","col3",struct("col4","col5","col6").alias("fields")))).show(10,False)
#+----+----+----+----+----+----+---------------------------------------------------------------------------------------+
#|col1|col2|col3|col4|col5|col6|jsn                                                                                    |
#+----+----+----+----+----+----+---------------------------------------------------------------------------------------+
#|123 |abc |45  |ert |45  |56  |{"col1":"123","col2":"abc","col3":"45","fields":{"col4":"ert","col5":"45","col6":"56"}}|
#+----+----+----+----+----+----+---------------------------------------------------------------------------------------+

cols=df.columns

df.withColumn("jsn",to_json(struct("col1","col2","col3",struct("col4","col5","col6").alias("fields")))).drop(*cols).show(10,False)
#+---------------------------------------------------------------------------------------+
#|jsn                                                                                    |
#+---------------------------------------------------------------------------------------+
#|{"col1":"123","col2":"abc","col3":"45","fields":{"col4":"ert","col5":"45","col6":"56"}}|
#+---------------------------------------------------------------------------------------+

#using toJSON
df.withColumn("jsn",struct("col1","col2","col3",struct("col4","col5","col6").alias("fields"))).drop(*cols).toJSON().collect()
#[u'{"jsn":{"col1":"123","col2":"abc","col3":"45","fields":{"col4":"ert","col5":"45","col6":"56"}}}']

#to write as json file
df.withColumn("jsn",struct("col1","col2","col3",struct("col4","col5","col6").alias("fields"))).\
drop(*cols).\
write.\
format("json").\
save("<path>")

更新:

jsn列表示为json结构

df.withColumn("jsn",struct("col1","col2","col3",struct("col4","col5","col6").alias("fields"))).drop(*cols).printSchema()
#root
# |-- jsn: struct (nullable = false)
# |    |-- col1: string (nullable = true)
# |    |-- col2: string (nullable = true)
# |    |-- col3: string (nullable = true)
# |    |-- fields: struct (nullable = false)
# |    |    |-- col4: string (nullable = true)
# |    |    |-- col5: string (nullable = true)
# |    |    |-- col6: string (nullable = true)
 类似资料:
  • 本文向大家介绍MongoDB 中创建分层JSON,包括了MongoDB 中创建分层JSON的使用技巧和注意事项,需要的朋友参考一下 使用以下语法在MongoDB中创建分层JSON- 让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出-

  • 我感兴趣的是用Java创建一个分层tif,使Photoshop能够识别层。我能够创建多页tif,但Photoshop无法将这些页面识别为层。不过,Acrobat可以查看这些页面。谁知道Photoshop是如何存储tif层数据的,以及如何用Java生成这些数据? 谢谢

  • 我有以下制表符分隔的示例数据集: 我正在对此数据运行一些转换,最终数据位于spark dataset中。之后,我用“period”分区将该数据集写入s3。因为我也希望在s3文件中使用period,所以我正在从from period列创建另一列“datasetperiod”。 我的scala函数来保存TSV数据集。 在S3上保存数据集的Scala代码。为S3上的分区添加新列datasetPeriod

  • 图层概述 图层是构成合成的元素。如果没有图层,合成就只是一个空帧。可根据需要使用许多图层来创建合成。某些合成包含数千个图层,而某些图层仅包含一个图层。 After Effects 中的图层类似于 Adobe Premiere Pro 中的轨道。主要差异是每个 After Effects 图层不能以多个素材项目作为其源,而一个 Premiere Pro 轨道通常包含多个剪辑。After Effect

  • 我在网上看到了Dataframes教程https://databricks.com/blog/2015/02/17/introducing-dataframes-in-spark-for-large-scale-data-science.html这是用Python编写的。我正试图把它翻译成Scala。 它们有以下代码: 因此,我首先将数据从一个读入一个数据帧,然后我得到: 但我不知道: > 如何将

  • 问题内容: 我对用Java创建分层的tif感兴趣,以使Photoshop能够识别这些层。我能够创建多页tif,但是Photoshop无法将页面识别为图层。尽管可以使用Acrobat查看页面。有人知道Photoshop如何存储tif图层数据以及如何用Java生成吗? 谢谢。 问题答案: 我已经为TIFF ImageIO插件进行了研究,据我了解,Photoshop在TIFF中存储图层信息的方式是完全专