在pyspark中执行随机试验

在pyspark中执行随机试验,pyspark,rdd,flatten,Pyspark,Rdd,Flatten,我最近正在学习pyspark,想申请解决其中一个问题。基本上,我希望对数据帧中的每条记录执行随机试验 order_id,order_date,distribution,quantity O1,D1,3 4 4 5 6 7 8 ... ,10 O2,D2,1 6 9 10 12 16 18 ..., 20 O3,D3,7 12 15 16 18 20 ... ,50 这里的分布列是100个百分位点,每个值用空格分隔 我想在dataframe中遍历每一行,并随机选择分布中的一个点,将这许多天添加

我最近正在学习pyspark,想申请解决其中一个问题。基本上,我希望对数据帧中的每条记录执行随机试验

order_id,order_date,distribution,quantity
O1,D1,3 4 4 5 6 7 8 ... ,10
O2,D2,1 6 9 10 12 16 18 ..., 20
O3,D3,7 12 15 16 18 20 ... ,50

这里的分布列是100个百分位点,每个值用空格分隔

我想在dataframe中遍历每一行,并随机选择分布中的一个点,将这许多天添加到order_date中,并创建一个新列arrival_date。 最后,我想通过到达日期获得平均数量。因此,我的最终数据帧应该如下所示

arrival_date,qty
A1,5
A2,10
我到目前为止所取得的成就如下

df = spark.read.option("header",True).csv("/tmp/test.csv")

def randSample(row):
    order_id = row.order_id
    quantity = int(row.quantity)
    data = []
    for i in range(1,20):
        n = random.randint(0,99)
        randnum = int(float(row.edd.split(" ")[n]))
        arrival_date = datetime.datetime.strptime(row.order_date.split(" ")[0], "%Y-%m-%d") + datetime.timedelta(days=randnum)
        data.append((arrival_date, quantity))
    return data
        
finalRDD = df.rdd.map(randSample)
计算结果看起来是正确的,但最终的DD结构如下所示

[
[(),(),(),()]
,[(),(),(),()]
,[(),(),(),()]
,[(),(),(),()]
]
主列表中的每个列表都是一条记录。嵌套列表中的每个元组都是对该记录的一次尝试。 基本上,我希望最终输出为平坦记录,以便执行平均值

[
(),
(),
(),
] 

嗯,我可以用平面图而不是地图来实现这一点。这对我来说是一次很好的学习。性能看起来也不错。请提供任何其他简单(代码行数较少)的方法。好吧,我能够使用平面图而不是地图来实现这一点。这对我来说是一次很好的学习。性能看起来也不错。请提供任何其他简单(代码行数较少)的方法。