在pyspark中聚合json数据

时间:2017-02-27 12:01:33

标签: apache-spark pyspark

我是pyspark的新手,任何人都可以帮我汇总这些数据。

我在这样的文本文件中有json数据

{"a":1 , "b":"abc", "c":"abc2", "d":"abc3" , "e":"1234"}
{"a":1 , "b":"abc2", "c":"abc", "d":"abc" ,"e":"1234"}
{"a":1 , "b":"abc", "c":"abc2", "d":"abc3","e":"123"}

我想在“b”,“c”,“d”列上汇总数据,同时在“a”列中添加值,然后添加新列“unique_e”,这将在基础上给出唯一的“e”列值列'e'。

这是我想要的最终输出

{"a":2 , "b":"abc", "c":"abc2", "d":"abc3" , "unique_e":"2"}
{"a":1 , "b":"abc2", "c":"abc", "d":"abc" , "unique_e":"1"}

1 个答案:

答案 0 :(得分:0)

试试这个:

import pyspark.sql.functions as f
 df = spark.read.json(pathToFile)
 df2 = df.groupby("b","c","d").agg(f.countDistinct(df["e"]).alias("unique_e"), f.sum(df["a"]).alias("sum_a"))

如果你想将它保存到单个json文件中,你可以这样做:

df2.coalesce(1).write(pathToDir)

json将在一个看起来像这样的文件中:part-00000-e3421247-f8cd-4ecb-b8e6-fc26894f5282.json

如果您没有定义spark(如果您使用pyspark shell或正确配置您的笔记本将定义),如果您从外部脚本运行代码,则可能会执行以下操作:< / p>

    spark = SparkSession.builder.master("local").appName("example").getOrCreate()

创建它。