小编js_*_*_55的帖子

pyspark -- 对 Array(Integer()) 类型的列中的值求和的最佳方法

可以说这是我的数据框...

name | scores
Dan  |  [10,5,2,12]
Ann  |  [ 12,3,5]
Jon  |  [ ] 
Run Code Online (Sandbox Code Playgroud)

所需的输出类似于

name | scores         | Total
Dan  |  [10,5,2,12]   | 29
Ann  |   [ 12,3,5]    | 20
Jon  |  [ ]           | 0
Run Code Online (Sandbox Code Playgroud)

我按照......制作了一个UDF

sum_cols = udf(lambda arr: if arr == [] then 0 else __builtins__.sum(arr),IntegerType())

df.withColumn('Total', sum_cols(col('scores'))).show()
Run Code Online (Sandbox Code Playgroud)

但是,我了解到 UDF 相对于纯 pySpark 函数来说相对较慢。

有没有办法在没有 UDF 的情况下在 pySpark 中执行上面的代码?

apache-spark apache-spark-sql pyspark spark-dataframe

9
推荐指数
2
解决办法
8155
查看次数

创建一个产生"n"列表的for循环(当n = 5时,5个列表,当n = 10时,列表为10个)

我多次尝试这样做但失败了

尝试1

num = int(input("How many products are you looking at: "))

for i in range(num):
    a="list"+str(i)
    a=[]
Run Code Online (Sandbox Code Playgroud)

尝试2(假设少于26个列表)

num = int(input("How many products are you looking at: "))

alphabet="abcdefghijklmnopqrstuvwxyz"

while(num>0):
    alphabet[0]=[]
    num=num-1
    alphabet=alphabet[1:]
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助

额外部分:

谢谢,谢谢你的帮助.我有一个最后一步,我需要制作n个矩阵.有没有办法制作任意数量的矩阵,比如5,矩阵标题为matrix1 = ......,matrix2 = .....等等?然后将列表中的矩阵.我一直在使用Python中的numpy,并且知道如何制作矩阵.下面是3x3矩阵.

matrix = numpy.zeros(shape=(3,3))
Run Code Online (Sandbox Code Playgroud)

但是一个矩阵列表给了我一些问题.这是我的尝试.

listOfMatrices=list(map(lambda x:matrix,range(int(num))))
Run Code Online (Sandbox Code Playgroud)

另一种尝试.

[matrix = numpy.zeros(shape=(n,n)) for _ in range(int(n)))]
Run Code Online (Sandbox Code Playgroud)

python for-loop

0
推荐指数
1
解决办法
61
查看次数