Json 迭代数据帧的所有行,并从其数据创建新对象

Json 迭代数据帧的所有行,并从其数据创建新对象,json,apache-spark,pyspark,apache-spark-sql,Json,Apache Spark,Pyspark,Apache Spark Sql,我有一个包含多列的数据框,我想为数据框中的每一行创建一个JSON,其中包含特定列的值 比如说,我有一个数据帧df1,其中列a,B,C,D,E,F,G 我正在尝试创建一个JSON结构 { "source_id": df1.C, "target_id": df1.G, "time_of_creation": 123456789123 } 我目前正在使用df1.rdd.tolocaterator遍历每一行 请告诉我是否有更

我有一个包含多列的数据框,我想为数据框中的每一行创建一个JSON,其中包含特定列的值

比如说,我有一个数据帧
df1
,其中列
a
B
C
D
E
F
G

我正在尝试创建一个JSON结构

{
   "source_id": df1.C,
   "target_id": df1.G,
   "time_of_creation": 123456789123
}
我目前正在使用df1.rdd.tolocaterator遍历每一行


请告诉我是否有更好的方法

您可以使用
来_json
命名_struct

df1.show()
+---+---+
|  C|  G|
+---+---+
| c1| g1|
+---+---+

result = df1.selectExpr("""
    to_json(
        named_struct(
            'source_id', C,
            'target_id', G,
            'time_of_creation', current_timestamp()
        )
    ) output_json
""")

result.show(20,0)
+---------------------------------------------------------------------------------+
|output_json                                                                      |
+---------------------------------------------------------------------------------+
|{"source_id":"c1","target_id":"g1","time_of_creation":"2021-01-02T14:12:19.612Z"}|
+---------------------------------------------------------------------------------+

那么您想创建
json
列表(每行一个)?或者您想创建pyspark数据帧,其中一列采用
json
格式(一行一
json
),或者您想将整个数据帧转换为单个
json
文件?是的,这是正确的。我想创建一个JSON列表(每行一个)。因为此列表正被用作另一个rest请求(POST)的输入。是否可以将此输出获取到另一个字符串变量?因为我基本上想创建一个JSON列表(每行一个),因为该列表将用作另一个rest请求(POST)的输入。@Divakar您可以使用
jsonlist=result.rdd.map(lambda r:r[0]).collect()
我被要求不要使用“collect()”或“tolocater()”,因为它不是并行计算中spark基础设施的最佳使用。请纠正我,如果我对“收集”的理解不正确,会将所有记录带到驱动程序中,因此我们正在按顺序有效地处理它们。@Divakar您说过要收集列表,所以您需要进行收集,以便将所有已处理的记录带回到驱动程序中。其他操作是并行完成的,但最后一步必须涉及收集,以便将您想要的列表返回到驱动程序中。这消除了我的疑虑。非常感谢。