将PySpark DataFrame转换为嵌套结构

时间:2017-07-03 11:09:29

标签: json apache-spark pyspark spark-dataframe

我正在学习PySpark。我将CSV文件加载到Spark DataFrame。之后我做了一些数据转换。最后,我想将一些列放入嵌套结构中,然后以JSON格式保存。

这是我的示例代码:

df = spark.createDataFrame([("Bilbo Baggins",  50), ("Gandalf", 32), ("Thorin", 19), 
                                ("Balin", 18), ("Kili", 37),("Dwalin", 19), ("Oin", 46), 
                                ("Gloin", 28), ("Fili", 22)], ["name", "age"])

mod_df = df.select(struct([col(x) for x in df.columns[:]]).alias("PersonalDetails"))

当我将其保存为JSON文件时,它看起来像:

{
        "PersonalDetails" :
                {
                        "name" : "Balin",
                        "age" : 18
                }
}
{
        "PersonalDetails" :
                {
                        "name" : "Gloin",
                        "age" : 28
                }
}

如您所见,它们作为单独的文档出现。但是我想让它们出现在一个包含数组格式的文档中,例如:

{
        "PersonalDetails" :[
                {
                        "name" : "Balin",
                        "age" : 18
                },
                {
                        "name" : "Gloin",
                        "age" : 28
                }
        ]
}

你能帮助我做错吗?谢谢:))

1 个答案:

答案 0 :(得分:2)

from pyspark.sql import functions as F

mod_df = df.select(
    F.struct(df.columns).alias('PersonalDetails')
).select(
    F.collect_list('PersonalDetails').alias('PersonalDetails')
)