我想在key1为1和2时分隔统计信息,key2为1,2,3的数字,然后以表格形式显示。
val df1 = sc.parallelize(List((1, 1), (1, 1), (1, 1), (1, 2),(1, 3), (2, 1), (2, 2), (2, 2))).toDF("key1","key2")
df2.groupBy("key1").groupBy("key2").agg(count("key2")).show()
我想计算key2,其中key1分别为1或2。并添加一个像这样的新col:
List((1, 1,3), (1, 1,3), (1, 1,3), (1, 2,1),(1, 3,1), (2, 1,1), (2, 2,2), (2, 2,2))
新col是key2的num 但那是错的。那我应该编码什么? THX!
答案 0 :(得分:0)
你的错误在以下一行
$("#mytextarea").mouseup(function() {
// obtain the object reference for the textarea>
var txtarea = document.getElementById("mytextarea");
// obtain the index of the first selected character
var start = txtarea.selectionStart;
// obtain the index of the last selected character
var finish = txtarea.selectionEnd;
//obtain all Text
var allText = txtarea.value;
// obtain the selected text
var sel = Array(finish - start).join("*");
//append te text;
var newText = allText.substring(0, start) + sel +
allText.substring(finish, allText.length);
txtarea.value = newText;
$('#newpost').offset({
top: 0,
left: 0
}).hide();
})
而不是df2.groupBy("key1").groupBy("key2").agg(count("key2")).show()
您使用了df1
而不是在一个df2
中合并两列,而是连续使用了两个groupBy
。 每groupBy
后应该有聚合。
所以工作代码是
groupBy
应该给你
df1.groupBy("key1", "key2").agg(count("key2")).show()
<强>更新强>
查看更新后的问题,使用+----+----+-----------+
|key1|key2|count(key2)|
+----+----+-----------+
| 2| 2| 2|
| 1| 2| 1|
| 1| 1| 3|
| 1| 3| 1|
| 2| 1| 1|
+----+----+-----------+
函数应该是必需的解决方案
window
应该给你
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._
def windowFunc = Window.partitionBy("key1", "key2")
df1.withColumn("result", count("key2").over(windowFunc)).show()