【发布时间】:2021-07-11 09:41:32
【问题描述】:
我有如下所示的数据框。我希望能够找到一个平均值并放入一个 new_column。我可以使用 udf 找到 avg,但不能将其放在列中。如果您可以在没有 udf 的情况下提供帮助,那就太好了。否则,欢迎对当前解决方案提供任何帮助。
from pyspark.sql.types import StructType,StructField
from pyspark.sql.types import StringType, IntegerType, ArrayType
data = [
("Smith","[55, 65, 75]"),
("Anna","[33, 44, 55]"),
("Williams","[9.5, 4.5, 9.7]"),
]
schema = StructType([
StructField('name', StringType(), True),
StructField('some_value', StringType(), True)
])
df = spark.createDataFrame(data = data, schema= schema)
df.show(truncate=False)
+--------+---------------+
|name |some_value |
+--------+---------------+
|Smith |[55, 65, 75] |
|Anna |[33, 44, 55] |
|Williams|[9.5, 4.5, 9.7]|
+--------+---------------+
解决办法是这样的,
array_mean = F.udf(lambda x: float(np.mean(x)), FloatType())
(来自Find mean of pyspark array<double>)返回一个数据框而不是一个新列。
欢迎任何帮助。谢谢。
【问题讨论】:
标签: arrays apache-spark pyspark user-defined-functions mean