【问题标题】:Average By key in Python/SparkPython/Spark 中的平均按键
【发布时间】:2020-12-05 07:02:57
【问题描述】:

我正在尝试根据 key 进行平均,我得到了如下数据:

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:作业因阶段失败而中止: 阶段 17.0 中的任务 5 失败 1 次,最近一次失败:丢失任务 17.0 阶段的 5.0(TID 141,localhost,执行器驱动程序):org.apache.spark.api.python.PythonException:Traceback(最近 最后调用):

预期输出:

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

当我们通过键平均 x 具有 1020 作为值时,10+20/2 =15x:15y 变为 30+40/2=35y:35

【问题讨论】:

  • 请提供完整的回溯
  • org.apache.spark.SparkException:作业因阶段故障而中止:阶段 20.0 中的任务 5 失败 1 次,最近一次失败:阶段 20.0 中丢失任务 5.0(TID 165,本地主机,执行程序驱动程序): org.apache.spark.api.python.PythonException: Traceback (最近一次调用最后一次):

标签: python dictionary pyspark


【解决方案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}

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 2015-09-07
    • 1970-01-01
    • 2018-09-27
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多