使用 Python/ Spark on Databricks 操作示例 json 列表

Manipulating sample json lists using Python/ Spark on Databricks

正在尝试对以下示例 json 列表进行逻辑解析:

FruitJson = [
 ('{"num":100, "fruit" : ["apple", "peach", "grape", "melon"]}',), 
 ('{"num":101, "fruit" : ["melon", "apple", "mango", "banana"]}',),  
]

理想输出:

水果 计数
苹果 2
甜瓜 2
桃色 1
葡萄 1
芒果 1
香蕉 1

我设法将列表的第一行放入数据框中,但无法从这里进一步推进:

dbutils.fs.put("/temp/test.json",'{"num":100, "fruit" : ["apple", "peach", "grape", "melon"]}'\
'{"num":101, "fruit" : ["melon", "apple", "mango", "banana"]}',True)
df = spark.read.option("multiline","true").json('/temp/test.json')
display(df)

非常感谢您的建议。

首先,您的 multiline 选项应该是 False,而不是 Truemultiline=False 表示您的 JSON 有多行,每行一行。 Docs

其次,您要实现的是一个简单的聚合,但您需要先 explode 将列表分成多行。

from pyspark.sql import functions as F

(df
    .withColumn('fruit', F.explode('fruit'))
    .groupBy('fruit')
    .agg(
        F.count('*').alias('cnt')
    )
    .show()
)

# +------+---+
# | fruit|cnt|
# +------+---+
# | grape|  1|
# | apple|  2|
# | mango|  1|
# |banana|  1|
# | melon|  2|
# | peach|  1|
# +------+---+