Путаница лямбда-функции Rdd вокруг строк против столбцов - PullRequest
1 голос
/ 20 октября 2019

У меня есть искровой RDD (полный код ниже), и я немного запутался.

Учитывая входные данные:

385 | 1
291 | 2

Если у меня есть ниже лямбда-функция, почему вlowerByKey у нас есть x [0] + y [0] = 385 + 291? Конечно, X и Y относятся к разным столбцам СДР? Или я принимаю это как означающее, что они ссылаются на

totalsByAge = rdd2.mapValues(lambda x: (x, 1)).reduceByKey(lambda x, y:(x[0] + y[0], x[1] + y[1]))

Полный код:

import findspark
findspark.init()
import pyspark

#UserID | Name | Age | Num_Friends
#r before the filepath converts it to a raw string
lines = sc.textFile(r"c:\Users\kiera\Downloads\fakefriends.csv") 

#For each line in the file, split it at the comma
#split 2 is the age 
#Split 3 is the number of friends
def splitlines(line):
    fields = line.split(',')
    age = int(fields[2])
    numFriends = int(fields[3])
    return (age, numFriends)

rdd2 = lines.map(splitlines)
totalsByAge = rdd2.mapValues(lambda x: (x, 1)).reduceByKey(lambda x, y:(x[0] + y[0], x[1] + y[1]))

rdd2 выглядит примерно так

[(33, 385),
 (26, 2),
 (55, 221),
 (40, 465),
 (68, 21),
 (59, 318),
 (37, 220),
 (54, 307)....

1 Ответ

2 голосов
/ 20 октября 2019

Хорошо, так, когда вы делаете первый шаг:

rdd2 = spark.sparkContext.parallelize([
(33, 385), (26, 2), (55, 221), (40, 465), (68, 21), (59, 318), (37, 220), (54, 307)
])

# Simple count example
# Make a key value pair like ((age, numFriends), 1) 
# Now your key is going to be (age, numFriends) and value is going to be 1
# When you say reduceByKey, it will add up all values for the same key
rdd3  = rdd2.map(lambda x: (x, 1)).reduceByKey(lambda x, y: x+y)

totalsByAge = rdd2.mapValues(lambda x: (x, 1)).reduceByKey(lambda x, y:(x[0] + y[0], x[1] + y[1]))

В вашем случае выше, что вы делаете:

  • Создайте попарно СДР из (age, (numFriends, 1))
  • reduceByKey где вы берете x и y и выполняете (x[0] + y[0], x[1] + y[1]) над ним. Здесь ваш x - это один элемент СДР, а y - другой (но сгруппированный по возрасту)
  • Вы делите возрастные группы (поскольку первый элемент - это ваш ключ, который age),добавьте x[0] с y[0], который добавляет numFriends для возрастной группы, и добавьте x[1] с y[1], который добавляет счетчик, который мы добавили на первом шаге mapValues для возрастной группы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...