可以说这是我的数据框...
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 中执行上面的代码?
我多次尝试这样做但失败了
尝试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)