pySpark总结嵌套列表

时间:2019-06-20 10:28:09

标签: python pyspark user-defined-functions

我有一个看起来像这样的数据框

Swift 3:
let sortedNameAry = nameStrAry.sort { $0.nameStr < $1.nameStr }
For Swift 4 you can use only this
let sortedNameAry = nameStrAry.sorted(by: <)

我想聚合数据帧并返回import pandas as pd df = pd.DataFrame({'hist': [[1, 2, 3], [0, 1, 0], [1, 0, 0]]}) df = spark.createDataFrame(df) 的逐元素求和。我除外的结果是hist

我试图这样做

[2, 3, 3]

但是我遇到了这个错误

from pyspark.sql.types import ArrayType, IntegerType
from pyspark.sql import functions as F

df.agg(F.udf(lambda x: list(np.sum(x, axis=0).astype('int')), ArrayType(IntegerType()))(F.collect_list(df.hist))).show(10, False)

由于我将UDF的输出显式转换为列表类型,所以我不希望这样。

1 个答案:

答案 0 :(得分:2)

我想,如果您需要的只是一个向量,该向量返回行总和,则可以轻松完成。

import pandas as pd
import pyspark.sql.functions as F

df = pd.DataFrame({'hist': [[1, 2, 3], [0, 1, 0], [1, 0, 0]]})
df = spark.createDataFrame(df)
import pyspark.sql.functions as F
sumOfRows = df.agg(F.array(*[F.sum(F.col("hist")[i]) for i in range(n+1)]).alias("sum"))
sumOfRows.show()

输出:

+---------+
|      sum|
+---------+
|[2, 3, 3]|
+---------+