#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}