Re: «Какое значение х и какое значение у», вы можете распечатать, чтобы увидеть их значения. Убедитесь, что вы просматриваете журналы исполнителя, а не драйвер, чтобы увидеть этот оператор печати. Более того, запустите его несколько раз, чтобы увидеть, дают ли они одинаковые значения для x и y каждый раз. Я не думаю, что порядок чтения записей гарантирован. Это может быть неочевидно с четырьмя записями, с которыми вы тестируете выше.
df.map(rec => (rec.split(",")(0).toInt, rec))
.reduceByKey((x,y)=> {println(s"x:$x,y:$y");y})
.map(rec => rec._2)
.foreach {println }
Re: «как это работает внутри» ReduceByKey объединяет значения для ключа на основе данной функции. Эта функция сначала запускается локально на каждом разделе. Выходные данные для каждого раздела затем перетасовываются на основе ключей, а затем выполняется другая операция сокращения. Это похоже на функцию объединителя в Map-Reduce. Это помогает в меньшем количестве данных, необходимых для перемешивания. Обычно это используется вместо groupByKey (), что приводит к тасованию в начале, а затем у вас есть возможность поработать со значениями для ключей.
Прикрепив пару изображений здесь, чтобы продемонстрировать это.