Python 如何使用reduceByKey(pyspark)创建嵌套结构?

Python 如何使用reduceByKey(pyspark)创建嵌套结构?,python,pyspark,rdd,reduce,Python,Pyspark,Rdd,Reduce,我正在使用spark(pyspark)处理一个数据集,我想基于3个值对其进行分区并写回S3。数据集如下所示- customerId、productId、createDate 我想通过customerId、productId、createDate对这些数据进行分区。因此,当我将这个分区数据写入s3时,它应该具有以下结构- customerId=1 productId='A1' createDate=2019-10 createDate=2019-11 createDat

我正在使用spark(pyspark)处理一个数据集,我想基于3个值对其进行分区并写回S3。数据集如下所示-

customerId、productId、createDate

我想通过customerId、productId、createDate对这些数据进行分区。因此,当我将这个分区数据写入s3时,它应该具有以下结构-

customerId=1
  productId='A1'
    createDate=2019-10
    createDate=2019-11
    createDate=2019-12
  productId='A2'
    createDate=2019-10
    createDate=2019-11
    createDate=2019-12
下面是我用来创建分区的代码

rdd = sc.textFile("data.json")  #sc is spark context
r1.map(lambda r: (r["customerId"], r["productId"],r["createDate"])).distinct().map(lambda r: (r[0], ([r[1]],[r[2]]))).reduceByKey(lambda a, b: (a[0] + b[0],a[1] + b[1])).collect()
[('1', ([A1,A2], ['2019-12', '2019-11', '2019-10', '2019-12', '2019-11', “2019-10”])]


这段代码确实给了我一个平面结构,而不是我提到的嵌套结构。有可能改变我描述的方式吗。任何指针都是高度敏感的。

首先将JSON文件读取到dataframe

import json
a=[json.dumps("/data.json")]
jsonRDD = sc.parallelize(a)
df = spark.read.json(jsonRDD)
然后使用
groupby
collectlist
获取所需格式

import pyspark.sql.functions as func
df.groupby('customerId','productId').agg(func.collectList('createDate')).collect()