我有以下格式的Spark数据框。

df = spark.createDataFrame([(1, 2, 3), (1, 4, 100), (20, 30, 50)],['a', 'b', 'c'])
df.show()


输入:

apache-spark - 如何在Spark DataFrame中计算按行中位数-LMLPHP

我想添加一个新列“ median”作为列“ a”,“ b”,“ c”的中位数。如何在PySpark中做到这一点。

预期产量:

apache-spark - 如何在Spark DataFrame中计算按行中位数-LMLPHP

我正在使用Spark 2.3.1

最佳答案

使用udf定义用户定义的函数,然后使用withColumn将指定的列添加到数据框中:

from numpy import median
from pyspark.sql.functions import col, udf
from pyspark.sql.types import IntegerType

def my_median(a, b, c):
    return int(median([int(a),int(b),int(c)]))

udf_median = udf(my_median, IntegerType())

df_t = df.withColumn('median', udf_median(df['a'], df['b'], df['c']))
df_t.show()

关于apache-spark - 如何在Spark DataFrame中计算按行中位数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54197788/

10-16 00:56