在pyspark(火花)中使用RDD的keyby进行管道衬里/键控

时间:2017-04-01 11:09:58

标签: python apache-spark pyspark

我在下面给出了rowsrdd的rdd,我已使用关键keyby()上的(0,8)和关键reducebykey()上的(1)来应用聚合:

rowsrdd=[[u'Chevrolet Chevelle Malibu', u'18.0', u'8', u'307.0', u'130.0', u'3504.', u'12.0', u'70', u'US'], [u'AMC Rebel SST', u'16.0', u'8', u'304.0', u'150.0', u'3433.', u'12.0', u'70', u'US']]

注意:上面的rdd不完整,它只是一个完整的rdd样本,可以了解下面的代码。

def aggonvalfunc(y):
    return y[1]
resultedrdd=rowsrdd.keyBy(lambda w:(w[0],w[8])).mapValues(lambda aggkey:aggonvalfunc(aggkey))\
    .mapValues(float).reduceByKey(lambda x,y: x+y)

给出了以下resultedrdd: 其属性为car_name, country_name and a numerical_value

resultedrdd=[((u'Dodge Monaco Brougham', u'US'), 15.5), ((u'Chevrolet Monte Carlo S', u'US'), 15.0), ((u'Datsun 280-ZX', u'Japan'), 32.7), ((u'Datsun 510', u'Japan'), 27.2), ((u'Plymouth Duster', u'US'), 65.0), ((u'Chrysler Cordoba', u'US'), 15.5), ((u'Chevrolet Nova', u'US'), 55.0), ((u'Dodge D100', u'US'), 13.0), ((u'Pontiac Safari (sw)', u'US'), 13.0), ((u'Dodge Colt m/m', u'US'), 33.5), ((u'Volkswagen Pickup', u'Europe'), 44.0), ((u'AMC Rebel SST (sw)', u'US'), 0.0), ((u'Chevrolet Caprice Classic', u'US'), 47.5), ((u'Chrysler Lebaron Town @ Country (sw)', u'US'), 18.5), ((u'Chevrolet Impala', u'US'), 52.0), ((u'Pontiac Phoenix', u'US'), 60.5), ((u'Ford Gran Torino', u'US'), 44.5), ((u'Datsun 310', u'Japan'), 37.2), ((u'AMC Ambassador SST', u'US'), 17.0), ((u'Toyota Starlet', u'Japan'), 39.1), ((u'Audi Fox', u'Europe'), 29.0), ((u'Saab 99e', u'Europe'), 25.0), ((u'AMC Ambassador Brougham', u'US'), 13.0), ((u'Dodge Monaco (sw)', u'US'), 12.0), ((u'AMC Concord', u'US'), 43.7), ((u'Chevrolet Concours', u'US'), 17.5), ((u'Chevrolet Chevette', u'US'), 121.6), ((u'Chrysler Lebaron Salon', u'US'), 17.6), ((u'Ford Mustang GL', u'US'), 27.0), ((u'Buick Estate Wagon (sw)', u'US'), 30.9), ((u'Ford Torino 500', u'US'), 19.0), ((u'Volkswagen Rabbit l', u'Europe'), 36.0), ((u'Datsun B210 GX', u'Japan'), 39.4), ((u'Ford Maverick', u'US'), 99.0), ((u'Datsun F-10 Hatchback', u'Japan'), 33.5), ((u'Audi 100 LS', u'Europe'), 24.0), ((u'AMC Pacer d/l', u'US'), 17.5), ((u'Ford Fairmont', u'US'), 26.4), ((u'Chevrolet Malibu Classic (sw)', u'US'), 19.2), ((u'Toyota Corolla Mark II (sw)', u'Japan'), 23.0), ((u'Plymouth Volare Custom', u'US'), 19.0), ((u'Toyota Mark II', u'Japan'), 39.0), ((u'Plymouth Volare', u'US'), 20.5), ((u'Plymouth Sapporo', u'US'), 23.2), ((u'Ford Thunderbird', u'US'), 16.0), ((u'Chrysler Lebaron Medallion', u'US'), 26.0), ((u'Toyota Celica GT Liftback', u'Japan'), 21.1), ((u'Mercury Marquis', u'US'), 11.0), ((u'Mercury Monarch ghia', u'US'), 20.2), ((u'Datsun B210', u'Japan'), 31.0), ((u'Datsun B-210', u'Japan'), 32.0), ((u'Chevy S-10', u'US'), 31.0), ((u'Buick Century Special', u'US'), 20.6), ((u'Mercury Cougar Brougham', u'US'), 15.0), ((u'Oldsmobile Cutlass Supreme', u'US'), 17.0), ((u'Hi 1200D', u'US'), 9.0), ((u'Mercury Monarch', u'US'), 15.0), ((u'Buick Opel Isuzu Deluxe', u'US'), 30.0), ((u'Mercury Capri 2000', u'US'), 23.0), ((u'Dodge Dart Custom', u'US'), 15.0), ((u'Mercury Lynx l', u'US'), 36.0), ((u'AMC Matador', u'US'), 78.5), ((u'Volkswagen Rabbit Custom', u'Europe'), 60.9), ((u'Fiat Strada Custom', u'Europe'), 37.3), ((u'Renault 12tl', u'Europe'), 27.0), ((u'Honda Civic', u'Japan'), 95.0), ((u'Volvo 144ea', u'Europe'), 19.0), ((u'Dodge Coronet Brougham', u'US'), 16.0), ((u'Honda Accord LX', u'Japan'), 29.5), ((u'Dodge Magnum XE', u'US'), 17.5), ((u'AMC Gremlin', u'US'), 78.0), ((u'Dodge Coronet Custom (sw)', u'US'), 14.0), ((u'Saab 900s', u'Europe'), 0.0), ((u'Ford Fairmont Futura', u'US'), 24.0), ((u'Datsun PL510', u'Japan'), 54.0), ((u'Dodge Aspen SE', u'US'), 20.0), ((u'AMC Matador (sw)', u'US'), 29.0), ((u'Chrysler Newport Royal', u'US'), 13.0), ((u'Pontiac Astro', u'US'), 23.0), ((u'Plymouth Custom Suburb', u'US'), 13.0), ((u'Renault 12 (sw)', u'Europe'), 26.0), ((u'Pontiac Ventura SJ', u'US'), 18.5), ((u'Toyota Corolla Liftback', u'Japan'), 55.8), ((u'Oldsmobile Delta 88 Royale', u'US'), 12.0), ((u'Volkswagen Super Beetle', u'Europe'), 26.0), ((u'Citroen DS-21 Pallas', u'Europe'), 0.0), ((u'Buick Electra 225 Custom', u'US'), 12.0), ((u'Audi 4000', u'Europe'), 34.3), ((u'Datsun 310 GX', u'Japan'), 38.0), ((u'Toyota Cressida', u'Japan'), 25.4), ((u'Chevrolet Malibu', u'US'), 33.5), ((u'Volvo Diesel', u'Europe'), 30.7), ((u'Ford Mustang', u'US'), 18.0), ((u'BMW 320i', u'Europe'), 21.5), ((u'Subaru DL', u'Japan'), 63.8), ((u'Ford Pinto Runabout', u'US'), 21.0), ((u'Buick Skylark Limited', u'US'), 28.4), ((u'Dodge Aries Wagon (sw)', u'US'), 25.8), ((u'Oldsmobile Cutlass Salon Brougham', u'US'), 43.8), ((u'BMW 2002', u'Europe'), 26.0), ((u'Plymouth Fury iii', u'US'), 28.0), ((u'Cadillac Eldorado', u'US'), 23.0), ((u'Ford Gran Torino (sw)', u'US'), 27.0), ((u'Chevrolet Bel Air', u'US'), 15.0), ((u'Dodge Colt Hatchback Custom', u'US'), 35.7), ((u'Buick Skylark', u'US'), 47.1), ((u'Fiat 124B', u'Europe'), 30.0), ((u'Volvo 245', u'Europe'), 20.0), ((u'Mercury Grand Marquis', u'US'), 16.5), ((u'Mercury Capri v6', u'US'), 21.0), ((u'AMC Ambassador DPL', u'US'), 15.0), ((u'Buick Century Luxus (sw)', u'US'), 13.0), ((u'Plymouth Fury III', u'US'), 15.0), ((u'Renault 5 GTL', u'Europe'), 36.0), ((u'Mercury Marquis Brougham', u'US'), 12.0), ((u'Renault 18i', u'Europe'), 34.5), ((u'Ford Fiesta', u'US'), 36.1), ((u'Toyota Corolla Mark ii', u'Japan'), 24.0), ((u'Volkswagen Rabbit', u'Europe'), 158.8), ((u'Datsun 510 (sw)', u'Japan'), 28.0), ((u'Mercedes Benz 300d', u'Europe'), 25.4), ((u'Datsun 1200', u'Japan'), 35.0), ((u'Plymouth Arrow GS', u'US'), 25.5), ((u'Ford Mustang II 2+2', u'US'), 25.5), ((u'Oldsmobile Vista Cruiser', u'US'), 12.0), ((u'Mazda RX3', u'Japan'), 18.0), ((u'Volvo 264gl', u'Europe'), 17.0), ((u'Pontiac Grand Prix LJ', u'US'), 16.0), ((u'Dodge Omni', u'US'), 30.9), ((u'Pontiac Sunbird Coupe', u'US'), 24.5), ((u'AMC Rebel SST', u'US'), 16.0), ((u'Chevrolet Nova Custom', u'US'), 16.0), ((u'Mercedes-Benz 240d', u'Europe'), 30.0), ((u'Dodge Coronet Custom', u'US'), 15.0), ((u'Ford Escort 4W', u'US'), 34.4), ((u'Datsun 710', u'Japan'), 56.0), ((u'Ford Fairmont 4', u'US'), 22.3), ((u'Honda Civic CVCC', u'Japan'), 69.1), ((u'Dodge Charger 2.2', u'US'), 36.0), ((u'Dodge Colt (sw)', u'US'), 28.0), ((u'Plymouth Fury', u'US'), 18.0), ((u'Mazda GLC', u'Japan'), 46.6), ((u'Plymouth Valiant', u'US'), 40.0), ((u'Datsun 200SX', u'Japan'), 32.9), ((u'Plymouth Satellite Custom', u'US'), 16.0), ((u'Dodge Aspen', u'US'), 37.7), ((u'Volkswagen Super Beetle 117', u'Europe'), 0.0), ((u'Ford Grenada ghia', u'US'), 18.0), ((u'Ford Country', u'US'), 12.0), ((u'Volkswagen Dasher', u'Europe'), 81.5), ((u'Ford LTD', u'US'), 27.0), ((u'Plymouth Horizon TC3', u'US'), 34.5), ((u'Ford Mustang Boss 302', u'US'), 0.0), ((u'Saab 99le', u'Europe'), 24.0), ((u'AMC Concord DL 6', u'US'), 20.2), ((u'Dodge Challenger SE', u'US'), 15.0), ((u'Volkswagen Rabbit C (Diesel)', u'Europe'), 44.3), ((u'Pontiac Catalina Brougham', u'US'), 14.0), ((u'Pontiac Lemans V6', u'US'), 21.5), ((u'Peugeot 504 (sw)', u'Europe'), 21.0), ((u'Pontiac Catalina', u'US'), 44.0), ((u'Chevrolet Chevelle Malibu', u'US'), 35.0), ((u'Mercury Zephyr', u'US'), 20.8), ((u'Chevy C20', u'US'), 10.0), ((u'Dodge Colt Hardtop', u'US'), 25.0), ((u'Peugeot 505s Turbo Diesel', u'Europe'), 28.1), ((u'Mazda GLC Custom l', u'Japan'), 37.0), ((u'Chevrolet Vega (sw)', u'US'), 22.0), ((u'Buick Century', u'US'), 39.4), ((u'Plymouth Grand Fury', u'US'), 16.0), ((u'Oldsmobile Cutlass Ciera (diesel)', u'US'), 38.0), ((u'Ford Mustang Cobra', u'US'), 23.6), ((u'Ford Grenada gl', u'US'), 20.2), ((u'Toyota Camry', u'Japan'), 20.0), ((u'Honda Prelude', u'Japan'), 33.7), ((u'Ford Ranger', u'US'), 28.0), ((u'Mercury Zephyr 6', u'US'), 19.8), ((u'Chevrolete Chevelle Malibu', u'US'), 16.0), ((u'Dodge Colt', u'US'), 81.9), ((u"Plymouth 'Cuda 340", u'US'), 14.0), ((u'Datsun 210', u'Japan'), 72.6), ((u'Cadillac Seville', u'US'), 16.5), ((u'Pontiac J2000 SE Hatchback', u'US'), 31.0), ((u'Ford Fairmont (auto)', u'US'), 20.2), ((u'Plymouth Horizon', u'US'), 34.2), ((u'Chevrolet Vega 2300', u'US'), 28.0), ((u'Toyota Corolla Tercel', u'Japan'), 38.1), ((u'Volkswagen Model 111', u'Europe'), 27.0), ((u'Chevrolet Chevelle Concours (sw)', u'US'), 13.0), ((u'Audi 100LS', u'Europe'), 43.0), ((u'Datsun 200-SX', u'Japan'), 23.9), ((u'Datsun 810 Maxima', u'Japan'), 24.2), ((u'Plymouth Valiant Custom', u'US'), 19.0), ((u'Datsun 610', u'Japan'), 22.0), ((u'Mazda RX-4', u'Japan'), 21.5), ((u'Buick Century 350', u'US'), 13.0), ((u'Toyota Tercel', u'Japan'), 37.7), ((u'Dodge Rampage', u'US'), 32.0), ((u'Peugeot 304', u'Europe'), 30.0), ((u'Chevrolet Monza 2+2', u'US'), 20.0), ((u'Fiat x1.9', u'Europe'), 31.0), ((u'Chevrolet Cavalier 2-door', u'US'), 34.0), ((u'Ford Mustang II', u'US'), 13.0), ((u'Toyota Corolla', u'Japan'), 263.1), ((u'Ford Escort 2H', u'US'), 29.9), ((u'Audi 5000s (diesel)', u'Europe'), 36.4), ((u'Ford F108', u'US'), 13.0), ((u'Volkswagen Scirocco', u'Europe'), 31.5), ((u'Dodge Aries SE', u'US'), 29.0), ((u'Subaru', u'Japan'), 58.3), ((u'Dodge St. Regis', u'US'), 18.2), ((u'Peugeot 504', u'Europe'), 94.2), ((u'Chevrolet Chevelle Malibu Classic', u'US'), 33.5), ((u'Buick Skylark 320', u'US'), 15.0), ((u'Volkswagen Rabbit Custom Diesel', u'Europe'), 43.1), ((u'Mazda GLC Custom', u'Japan'), 31.0), ((u'Toyota Corolla Hardtop', u'Japan'), 24.0), ((u'Plymouth Satellite', u'US'), 18.0), ((u'AMC Concord d/l', u'US'), 18.1), ((u'Honda Accord CVCC', u'Japan'), 31.5), ((u'Pontiac Phoenix LJ', u'US'), 19.2), ((u'Oldsmobile Omega Brougham', u'US'), 26.8), ((u'Chevrolet Cavalier Wagon', u'US'), 27.0), ((u'Plymouth Satellite Custom (sw)', u'US'), 14.0), ((u'Honda Civic (auto)', u'Japan'), 32.0), ((u'Datsun 210 MPG', u'Japan'), 37.0), ((u'Mercedes-Benz 280s', u'Europe'), 16.5), ((u'Chevrolet Citation', u'US'), 80.3), ((u'Chrysler New Yorker Brougham', u'US'), 13.0), ((u'Nissan Stanza XE', u'Japan'), 36.0), ((u'Toyota Corolla 1200', u'Japan'), 63.0), ((u'Plymouth Satellite (sw)', u'US'), 0.0), ((u'Dodge Aspen 6', u'US'), 20.6), ((u'Chevrolet Cavalier', u'US'), 28.0), ((u'Saab 99gle', u'Europe'), 21.6), ((u'Plymouth Satellite Sebring', u'US'), 18.0), ((u'Buick Regal Sport Coupe (turbo)', u'US'), 17.7), ((u'Fiat 128', u'Europe'), 53.0), ((u'Plymouth Reliant', u'US'), 57.2), ((u'Ford Pinto', u'US'), 137.5), ((u'Plymouth Champ', u'US'), 39.0), ((u'Ford Futura', u'US'), 18.1), ((u'Plymouth Volare Premier v8', u'US'), 13.0), ((u'Ford Country Squire (sw)', u'US'), 28.5), ((u'Ford Torino', u'US'), 17.0), ((u'Plymouth Fury Gran Sedan', u'US'), 14.0), ((u'Fiat 131', u'Europe'), 28.0), ((u'AMC Hornet Sportabout (sw)', u'US'), 18.0), ((u'Pontiac Grand Prix', u'US'), 16.0), ((u'Oldsmobile Starfire SX', u'US'), 23.8), ((u'Audi 5000', u'Europe'), 20.3), ((u'Mazda RX2 Coupe', u'Japan'), 19.0), ((u'Datsun 510 Hatchback', u'Japan'), 37.0), ((u'Buick Century Limited', u'US'), 25.0), ((u'Oldsmobile Cutlass LS', u'US'), 26.6), ((u'Fiat 124 TC', u'Europe'), 26.0), ((u'Buick LeSabre Custom', u'US'), 13.0), ((u'Volkswagen Jetta', u'Europe'), 33.0), ((u'Fiat 124 Sport Coupe', u'Europe'), 26.0), ((u'Pontiac Firebird', u'US'), 19.0), ((u'Volkswagen Dasher (diesel)', u'Europe'), 43.4), ((u'Ford Pinto (sw)', u'US'), 22.0), ((u'Toyota Celica GT', u'Japan'), 32.0), ((u'Saab 99LE', u'Europe'), 25.0), ((u'Opel Manta', u'Europe'), 50.0), ((u'Chevrolet C10', u'US'), 13.0), ((u'Honda Accord', u'Japan'), 68.4), ((u'Ford Torino (sw)', u'US'), 0.0), ((u'Chevrolet Camaro', u'US'), 27.0), ((u'Buick Skyhawk', u'US'), 21.0), ((u'Honda Civic 1500 gl', u'Japan'), 44.6), ((u'Peugeot 604sl', u'Europe'), 16.2), ((u'Capri ii', u'US'), 25.0), ((u'Ford Grenada', u'US'), 18.5), ((u'Plymouth Cricket', u'US'), 26.0), ((u'Opel 1900', u'Europe'), 53.0), ((u'Chevrolet Monte Carlo Landau', u'US'), 34.7), ((u'AMC Hornet', u'US'), 77.5), ((u'Datsun 810', u'Japan'), 22.0), ((u'Mazda RX-7 GS', u'Japan'), 23.7), ((u'Mazda GLC 4', u'Japan'), 34.1), ((u'Chevrolet Monte Carlo', u'US'), 15.0), ((u'AMC Concord DL', u'US'), 23.0), ((u'Triumph TR7 Coupe', u'Europe'), 35.0), ((u'Ford Galaxie 500', u'US'), 43.0), ((u'Ford Grenada l', u'US'), 22.0), ((u'Ford F250', u'US'), 10.0), ((u'Oldsmobile Omega', u'US'), 11.0), ((u'Plymouth Horizon Miser', u'US'), 38.0), ((u'Ford LTD Landau', u'US'), 17.6), ((u'Ford Fairmont (man)', u'US'), 25.1), ((u'AMC Spirit DL', u'US'), 27.4), ((u'Chevrolet Woody', u'US'), 24.5), ((u'Mazda 626', u'Japan'), 62.900000000000006), ((u'Chevrolet Vega', u'US'), 66.0), ((u'Mazda GLC Deluxe', u'Japan'), 66.9), ((u'Honda Civic 1300', u'Japan'), 35.1), ((u'Volkswagen 411 (sw)', u'Europe'), 22.0), ((u'Volvo 244DL', u'Europe'), 22.0), ((u'AMC Pacer', u'US'), 19.0), ((u'Dodge D200', u'US'), 11.0), ((u'Volvo 145e (sw)', u'Europe'), 18.0), ((u'Dodge Diplomat', u'US'), 19.4), ((u'Plymouth Horizon 4', u'US'), 34.7), ((u'Renault Lecar Deluxe', u'Europe'), 40.9), ((u'Toyota Corolla 1600 (sw)', u'Japan'), 27.0), ((u'Volkswagen 1131 Deluxe Sedan', u'Europe'), 26.0), ((u'Volkswagen Type 3', u'Europe'), 23.0)]

我的问题是,我想再次对numerical_value的{​​{1}}关于密钥resultedrdd应用聚合(总和),因为我在面对问题时再次执行{{ 1}}就可以了。任何建议我怎么能实现这一目标?我想有个建议。

注意:我这样做是为了管道rdd,以便更好,更快地计算不同密钥的聚合。

1 个答案:

答案 0 :(得分:0)

您应该将country_name映射为唯一的密钥,然后您可以使用reduceByKey()

new_rdd = resultedrdd.map(lambda (k,v): (k[1],v)).reduceByKey(lambda x,y: x+y)
new_rdd.collect()
#[(u'Europe', 1952.4),
# (u'Japan', 2405.6000000000004),
# (u'US', 5000.799999999999)]