我有pyspark数据框,我想将其转换为JSON。为此,我已经完成了以下操作。
df.toJSON().collect()
但是此操作将数据发送给驱动程序,这不仅成本高昂,而且要花费大量时间来执行。我的数据帧包含数百万条记录。因此,没有collect()操作比collect()进行了优化,还有其他方法可以做到这一点。
下面是我的数据框df:-
product cost
pen 10
book 40
bottle 80
glass 55
并且输出如下:-
[{product:'pen',cost:40},{product:'book',cost:40},{product:'bottle',cost:80},{product:'glass',cost:55}]
对于spark2.0+
,您可以使用create_map
在两列中创建MapType()
,然后使用to_json
将其转换为json string
。
from pyspark.sql import functions as F
df.withColumn("JSON", F.to_json(F.create_map("product","cost")))\
.drop("product","cost")\
.show()
#+-------------+
#| JSON|
#+-------------+
#| {"pen":10}|
#| {"book":40}|
#|{"bottle":80}|
#| {"glass":55}|
#+-------------+
#root
#|-- JSON: string (nullable = true)