Dataframe 按常量值对数据帧的列进行除法

Dataframe 按常量值对数据帧的列进行除法,dataframe,apache-spark,pyspark,Dataframe,Apache Spark,Pyspark,我有一个以下格式的数据框 | Occupation | wa_rating | Genre | | engineer | 935 | Musical | 现在我想将这个数据帧的Rating列除以totalRatings 但是当我做的时候 resultDF = joinedDF.select(col("wa_rating")/totalRating) 这给了我以下的错误 unsupported literal type class java.util.Arraylist 您的totalRat

我有一个以下格式的数据框

| Occupation | wa_rating | Genre |
| engineer | 935 | Musical |
现在我想将这个数据帧的Rating列除以totalRatings

但是当我做的时候

resultDF = joinedDF.select(col("wa_rating")/totalRating)
这给了我以下的错误

unsupported literal type class java.util.Arraylist

您的
totalRating
变量可能是一个列表。例如
[100]
。你不能把一个数字除以一个列表。这会抛出您的错误:

resultDF = joinedDF.select(col("wa_rating")/[100])
但事实并非如此

resultDF = joinedDF.select(col("wa_rating")/100)
检查
totalRating
是否为实际数字(浮点或整数)。如果是一个包含数字的列表,只需从中提取数字即可

编辑:

从您的评论中,我们现在知道您的
totalRating
是一个列表。您可以使用以下方法将其转换为数字:

totalRating = joinedDF3.groupBy().sum("Rating").collect()[0][0]

看起来“totalRating”类型是Arraylist;即使在常规Scala中也不允许对这种类型进行除法。@pasha701 totalRating是一个常量。我创建了totalRating,如下所示:totalRating=joinedDF3.groupBy().sum(“Rating”).collect()。有没有办法创建一个列表而不是这个数字。Ayush,如果您想让命令正常工作,
totalRating
需要是一个数字,而不是列表。您的表达式
totalRating=joinedDF3.groupBy().sum(“Rating”).collect()
返回我在回答中怀疑的列表。你不会想要的。您想提取列表中的数字,如本文所建议的,您的
totalRating
需要
totalRating=joinedDF3.groupBy().sum(“Rating”).collect()[0][0]
很酷,如果您满意,请接受我的答案