我有一个需要生成为 json 文件的配置单元表。为了实现它,我已申请collect_list(struct(fields..))
为 A 并将其保存为 json 使用spark.write.json
.
但是 json 在开头有一个我不需要的附加索引字段“A”。我只需要 json 值的数组。我正在使用 pyspark
例如:
A:{[array of jsons]}
Expected: [array of json]
我有一个需要生成为 json 文件的配置单元表。为了实现它,我已申请collect_list(struct(fields..))
为 A 并将其保存为 json 使用spark.write.json
.
但是 json 在开头有一个我不需要的附加索引字段“A”。我只需要 json 值的数组。我正在使用 pyspark
例如:
A:{[array of jsons]}
Expected: [array of json]
与其写成Json
格式,不如试着写成CSV
格式。
您可以尝试转换Array
类型,String
然后将数据写入 HDFS 目录。
Example:
Scala:
val df=Seq((1,2,3),(3,4,5),(1,3,1)).toDF("i","j","k")
val df1=df.groupBy("i").agg(collect_set("j").alias("j")).selectExpr("cast(j as string)j")
df1.repartition(1).write.option("quote", "\u0000").mode("overwrite").csv("<hdfs_path>")
Output data:
[2, 3]
[4]
(或者)
Pyspark:
df=spark.createDataFrame([(1,2,3),(3,4,5),(1,3,1)],["i","j","k"])
from pyspark.sql.functions import *
df1=df.groupBy("i").agg(collect_set("j").alias("j")).selectExpr("cast(j as string)j")
df1.repartition(1).write.option("quote", "").mode("overwrite").csv("<hdfs_path>")
Output data:
[2, 3]
[4]
生成collect_list(struct)
json 后。要删除索引A
,我将其读入 pandas 数据框并通过将其再次保存为 json Setting 来删除索引orient='records'
。
注意:collect_list
of struct 仅适用于 spark SQL。蜂巢不支持它