Spark SQL Collect_list(struct) 保存为 json
Posted
技术标签:
【中文标题】Spark SQL Collect_list(struct) 保存为 json【英文标题】:Spark SQL Collect_list(struct) saved as json 【发布时间】:2019-09-17 19:02:23 【问题描述】:我有一个需要生成为 json 文件的配置单元表。为了实现它,我申请了collect_list(struct(fields..))
as A
并使用spark.write.json
将其保存为json。
但是 json 在开头有一个额外的索引字段“A”,我不需要。我只需要 json 值的数组。我正在使用 pyspark
例如:
A:[array of jsons]
Expected: [array of json]
【问题讨论】:
【参考方案1】:不要写成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]
【讨论】:
我试过了,它显示输出为 org.apache.spark.sql.catalyst.expressions.unsafearraydata【参考方案2】:在将collect_list(struct)
生成为 json 之后。要删除索引A
,我将其读入熊猫数据框并通过再次将其保存为 json 来删除索引
设置orient='records'
。
注意:collect_list
of struct 仅适用于 spark SQL。 Hive 不支持它
【讨论】:
以上是关于Spark SQL Collect_list(struct) 保存为 json的主要内容,如果未能解决你的问题,请参考以下文章
Spark SQL Collect_list(struct) 保存为 json
Learning Spark [6] - Spark SQL高级函数
intellij 中 spark scala 应用程序中的线程“main”java.lang.NoClassDefFoundError:org/apache/spark/sql/catalyst/St
在 SQL (Hive) 中使用 collect_list 函数来聚合用户序列