检查您输入dataframe
和输出dataframe
,下面可能是您的解决方案。
import org.apache.spark.sql.functions._
df.withColumn("a", lit("a")).join(broadcast(df.select(lit("a"), sum("count").as("sum"))), Seq("a"))
.select($"Code", $"count", ($"count"/$"sum").as("average"), (($"count"/$"sum")*100).as("*100"))
你应该得到你想要的输出
+----+-----+-------------------+------------------+
|Code|count|average |*100 |
+----+-----+-------------------+------------------+
|58 |926 |0.5402567094515752 |54.02567094515752 |
|108 |438 |0.2555425904317386 |25.55425904317386 |
|7 |176 |0.10268378063010501|10.268378063010502|
|64 |174 |0.10151691948658109|10.15169194865811 |
+----+-----+-------------------+------------------+
说明
两个dataframe
s为join
ED和所需的列select
版
第一数据帧是df.withColumn("a", lit("a"))
和第二个数据帧是df.select(lit("a"), sum("count").as("sum"))
。他们与共同的列a
加入。最后选择重要的专栏。
我希望答案是有帮助的让你最终所需要的数据帧
可否请你添加一些你一起玩线上游戏到目前为止的代码示例? – Pavel
我正在使用..... groupBy(“Code”)。agg(count(“Code”)from large data file and I am results results like the table Original data。现在我想计算每个计数值的百分比作为显示在'计数'列 –
请分享您使用的代码示例,即使其完全错误,这将帮助人们了解问题并给您建议等 – Pavel