如何避免在Spark中嵌套地图调用?

问题描述 投票:0回答:1

我有一个交易清单,用户可以将一个板子从一个站点转移到另一个站点。这是一个数组数组,称为trans

Board:  User:    Station:     Action:      Time:
[
 ['1', 'Ana', 'Tribeca', 'check_out', '1:00pm'],
 ['1', 'Ana', 'Soho'   , 'park'     , '2:00pm'],
 ['1', 'Bob', 'Soho'   , 'check_out', '3:00pm'],
 ['1', 'Bob', 'Chelsea', 'park'     , '4:00pm'],
 ['2'...]
]

(例如,董事会'1'在'1:00 pm'由'Tribeca'中的'Ana'签出,在'2:00 pm'停在Soho,然后由'Bob'签出。]]

使用此行代码,我将每个板子分组到其交易中:

board_groups = trans
    .map(lambda oneTrans: 
        (oneTrans[0], 
        [oneTrans[1], oneTrans[2], oneTrans[3], oneTrans[4]]))
    .groupByKey()
    .mapValues(list)

给予:

('1', [
       ['Ana' , 'Tribeca' , 'check_out', '1:00pm'],
       ['Ana' , 'Soho'    , 'park'     , '2:00pm'],
       ['Bob' , 'Soho'    , 'check_out', '3:00pm'],
       ['Bob' , 'Chelsea' , 'park'     , '4:00pm' ]
      ]),
('2', ...)

我该如何实现:

('1', ('Ana',
       [
         ['Tribeca', 'check_out', '1:00pm'],
         ['Soho'   , 'park'     , '2:00pm']
       ]
      ),

      ('Bob',
       [
         ['Soho'   , 'check_out', '3:00pm'],
         ['Chelsea', 'park'     , '4:00pm' ]
       ]
      )
),
('2'...)

使用Spark的方法?

由于board_groups的每个值都是一个数组数组,所以我尝试在其上使用mapValue,因此对于每个值内的每个数组,我都可以map将每个用户设置为键,然后进行分组用户在一起。但是我无法执行此操作,因为这涉及嵌套并行化调用。

我有一个交易清单,用户可以将一个板子从一个站点转移到另一个站点。这是一个数组,称为trans:板:用户:站:操作:时间:[['1','Ana','Tribeca'...

python apache-spark pyspark mapreduce
1个回答
0
投票

假设您的数据是

© www.soinside.com 2019 - 2024. All rights reserved.