Усреднение по ключу в Python /Spark

#python #dictionary #pyspark

#python #словарь #pyspark

Вопрос:

Я пытаюсь выполнить среднее значение на основе ключа, и мне были предоставлены данные, как показано ниже:

 data = [
    {"x":10,"y":30},{"x":20,"y":40}
]
  

До сих пор пытался

 df=sc.parallelize(data)
df.groupByKey().mapValues(lambda x:sum(x)/len(x)).collect()
  

Я получаю сообщение об ошибке :

org.apache.spark.SparkException: Задание прервано из-за сбоя этапа: задача 5 на этапе 17.0 выполнялась с ошибкой 1 раз, самый последний сбой: утеряна задача 5.0 на этапе 17.0 (TID 141, localhost, драйвер исполнителя): org.apache.spark.api.python.Исключение PythonException: трассировка (последний последний вызов):

Ожидаемый результат :

  {"x":15,"y":35}
  

Поскольку мы усредняем по ключу, x имеет 10 и 20 в качестве значений, 10 20/2 =15 ie x:15 и y становится 30 40/2=35 ie y:35

Комментарии:

1. Пожалуйста, предоставьте полную обратную трассировку

2. org.apache.spark.SparkException: Задание прервано из-за сбоя этапа: задача 5 на этапе 20.0 выполнялась с ошибкой 1 раз, самый последний сбой: утеряна задача 5.0 на этапе 20.0 (TID 165, localhost, драйвер исполнителя): org.apache.spark.api.python. Исключение PythonException: трассировка (последний последний вызов):

Ответ №1:

Попробуйте это.

 data = [
    {"x":10,"y":30},{"x":20,"y":40}
]

rdd = spark.sparkContext.parallelize(data)
val = rdd.flatMap(lambda line: (line.items())).groupByKey().mapValues(lambda x : sum(x)/len(x)).collect()

dict(val)

{'x': 15.0, 'y': 35.0}